From 7c0fb41ec04529b6fc93cbe1c09a115e9160e95d Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Tue, 10 May 2016 13:45:58 -0400 Subject: [PATCH] Deprecation: Use `Ember.Helper` for later versions of Ember --- .../admin/helpers/human-size.js.es6 | 6 ++-- .../admin/helpers/preserve-newlines.js.es6 | 6 ++-- .../admin/helpers/value-at-tl.js.es6 | 2 +- .../templates/customize-css-html-show.hbs | 2 +- .../discourse/controllers/history.js.es6 | 8 ++++- .../discourse/helpers/application.js.es6 | 18 +----------- .../discourse/helpers/border-color.js.es6 | 5 ++-- .../helpers/bound-avatar-template.js.es6 | 5 ++++ .../discourse/helpers/bound-avatar.js.es6 | 10 +++++++ .../helpers/bound-category-link.js.es6 | 4 +++ .../discourse/helpers/bound-date.js.es6 | 5 ++-- .../discourse/helpers/bound-i18n.js.es6 | 3 -- .../helpers/capitalize-string.js.es6 | 3 ++ .../discourse/helpers/capitalize.js.es6 | 3 -- .../discourse/helpers/category-badge.js.es6 | 2 +- .../discourse/helpers/category-link.js.es6 | 3 +- .../discourse/helpers/cold-age-class.js.es6 | 2 +- .../discourse/helpers/cook-text.js.es6 | 2 +- .../discourse/helpers/custom-html.js.es6 | 7 +++-- .../discourse/helpers/dash-if-empty.js.es6 | 6 ++-- .../discourse/helpers/discouse-tag.js.es6 | 2 +- .../discourse/helpers/fa-icon.js.es6 | 7 +---- .../discourse/helpers/format-age.js.es6 | 2 +- .../discourse/helpers/format-date.js.es6 | 2 +- .../javascripts/discourse/helpers/i18n.js.es6 | 2 +- .../discourse/helpers/icon-or-image.js.es6 | 11 +++---- .../discourse/helpers/loading-spinner.es6 | 6 ++-- .../discourse/helpers/max-usernames.js.es6 | 2 +- .../discourse/helpers/period-title.js.es6 | 9 ++++-- .../discourse/helpers/plugin-outlet.js.es6 | 29 +++---------------- .../javascripts/discourse/helpers/raw.js.es6 | 2 +- .../discourse/helpers/shorten-url.js.es6 | 2 +- .../discourse/helpers/topic-link.js.es6 | 2 +- .../discourse/helpers/user-avatar.js.es6 | 2 +- .../discourse/helpers/user-status.js.es6 | 9 +++--- .../discourse/lib/ember_compat_handlebars.js | 3 +- .../helpers.js.es6} | 19 +++++++++++- .../discourse/templates/modal/history.hbs | 2 +- .../discourse/templates/user/messages.hbs | 2 +- app/assets/javascripts/main_include.js | 5 ++-- .../components/poll-results-standard.js.es6 | 2 +- 41 files changed, 111 insertions(+), 113 deletions(-) create mode 100644 app/assets/javascripts/discourse/helpers/bound-avatar-template.js.es6 create mode 100644 app/assets/javascripts/discourse/helpers/bound-avatar.js.es6 create mode 100644 app/assets/javascripts/discourse/helpers/bound-category-link.js.es6 delete mode 100644 app/assets/javascripts/discourse/helpers/bound-i18n.js.es6 create mode 100644 app/assets/javascripts/discourse/helpers/capitalize-string.js.es6 delete mode 100644 app/assets/javascripts/discourse/helpers/capitalize.js.es6 rename app/assets/javascripts/discourse/{helpers/register-unbound.js.es6 => lib/helpers.js.es6} (61%) diff --git a/app/assets/javascripts/admin/helpers/human-size.js.es6 b/app/assets/javascripts/admin/helpers/human-size.js.es6 index 34d17402da9..a43897c627e 100644 --- a/app/assets/javascripts/admin/helpers/human-size.js.es6 +++ b/app/assets/javascripts/admin/helpers/human-size.js.es6 @@ -1,3 +1,3 @@ -Em.Handlebars.helper('human-size', function(size) { - return new Handlebars.SafeString(I18n.toHumanSize(size)); -}); +import { htmlHelper } from 'discourse/lib/helpers'; + +export default htmlHelper(size => I18n.toHumanSize(size)); diff --git a/app/assets/javascripts/admin/helpers/preserve-newlines.js.es6 b/app/assets/javascripts/admin/helpers/preserve-newlines.js.es6 index aeb9f30b377..5f70a2acc84 100644 --- a/app/assets/javascripts/admin/helpers/preserve-newlines.js.es6 +++ b/app/assets/javascripts/admin/helpers/preserve-newlines.js.es6 @@ -1,3 +1,3 @@ -Em.Handlebars.helper('preserve-newlines', str => { - return new Handlebars.SafeString(Discourse.Utilities.escapeExpression(str).replace(/\n/g, "
")); -}); +import { htmlHelper } from 'discourse/lib/helpers'; + +export default htmlHelper(str => Discourse.Utilities.escapeExpression(str).replace(/\n/g, "
")); diff --git a/app/assets/javascripts/admin/helpers/value-at-tl.js.es6 b/app/assets/javascripts/admin/helpers/value-at-tl.js.es6 index 8fdc4e5d2bf..aeac49e83d6 100644 --- a/app/assets/javascripts/admin/helpers/value-at-tl.js.es6 +++ b/app/assets/javascripts/admin/helpers/value-at-tl.js.es6 @@ -1,4 +1,4 @@ -import registerUnbound from 'discourse/helpers/register-unbound'; +import { registerUnbound } from 'discourse/lib/helpers'; registerUnbound('value-at-tl', function(data, params) { var tl = parseInt(params.level, 10); diff --git a/app/assets/javascripts/admin/templates/customize-css-html-show.hbs b/app/assets/javascripts/admin/templates/customize-css-html-show.hbs index 387cf32d705..024c670845d 100644 --- a/app/assets/javascripts/admin/templates/customize-css-html-show.hbs +++ b/app/assets/javascripts/admin/templates/customize-css-html-show.hbs @@ -32,7 +32,7 @@
  • - {{fa-icon-bound maximizeIcon}} +
  • diff --git a/app/assets/javascripts/discourse/controllers/history.js.es6 b/app/assets/javascripts/discourse/controllers/history.js.es6 index 973ff24a45c..42550be8803 100644 --- a/app/assets/javascripts/discourse/controllers/history.js.es6 +++ b/app/assets/javascripts/discourse/controllers/history.js.es6 @@ -16,7 +16,6 @@ function customTagArray(fieldName) { export default Ember.Controller.extend(ModalFunctionality, { loading: true, viewMode: "side_by_side", - revisionsTextKey: "post.revisions.controls.comparing_previous_to_current_out_of_total", _changeViewModeOnMobile: function() { if (this.site.mobileView) { this.set("viewMode", "inline"); } @@ -25,6 +24,13 @@ export default Ember.Controller.extend(ModalFunctionality, { previousTagChanges: customTagArray('model.tags_changes.previous'), currentTagChanges: customTagArray('model.tags_changes.current'), + @computed('previousVersion', 'model.current_version', 'model.version_count') + revisionsText(previous, current, total) { + return I18n.t("post.revisions.controls.comparing_previous_to_current_out_of_total", { + previous, current, total + }); + }, + refresh(postId, postVersion) { this.set("loading", true); diff --git a/app/assets/javascripts/discourse/helpers/application.js.es6 b/app/assets/javascripts/discourse/helpers/application.js.es6 index 2f4ea292c81..dda9e4e7b99 100644 --- a/app/assets/javascripts/discourse/helpers/application.js.es6 +++ b/app/assets/javascripts/discourse/helpers/application.js.es6 @@ -1,24 +1,8 @@ -import registerUnbound from 'discourse/helpers/register-unbound'; +import { registerUnbound } from 'discourse/lib/helpers'; import { longDate, autoUpdatingRelativeAge, number } from 'discourse/lib/formatter'; const safe = Handlebars.SafeString; -Em.Handlebars.helper('bound-avatar', (user, size) => { - if (Em.isEmpty(user)) { - return new safe("
    "); - } - - const avatar = Em.get(user, 'avatar_template'); - return new safe(Discourse.Utilities.avatarImg({ size: size, avatarTemplate: avatar })); -}, 'username', 'avatar_template'); - -/* - * Used when we only have a template - */ -Em.Handlebars.helper('bound-avatar-template', (at, size) => { - return new safe(Discourse.Utilities.avatarImg({ size: size, avatarTemplate: at })); -}); - registerUnbound('raw-date', dt => longDate(new Date(dt))); registerUnbound('age-with-tooltip', dt => new safe(autoUpdatingRelativeAge(new Date(dt), {title: true}))); diff --git a/app/assets/javascripts/discourse/helpers/border-color.js.es6 b/app/assets/javascripts/discourse/helpers/border-color.js.es6 index eda61b6aede..7d6d2286760 100644 --- a/app/assets/javascripts/discourse/helpers/border-color.js.es6 +++ b/app/assets/javascripts/discourse/helpers/border-color.js.es6 @@ -1,4 +1,3 @@ -export default Ember.Handlebars.makeBoundHelper(function(value) { - return ("border-color: #" + value).htmlSafe(); -}); +import { htmlHelper } from 'discourse/lib/helpers'; +export default htmlHelper(color => `border-color: #${color}`); diff --git a/app/assets/javascripts/discourse/helpers/bound-avatar-template.js.es6 b/app/assets/javascripts/discourse/helpers/bound-avatar-template.js.es6 new file mode 100644 index 00000000000..9aafa37a6e9 --- /dev/null +++ b/app/assets/javascripts/discourse/helpers/bound-avatar-template.js.es6 @@ -0,0 +1,5 @@ +import { htmlHelper } from 'discourse/lib/helpers'; + +export default htmlHelper((avatarTemplate, size) => { + return Discourse.Utilities.avatarImg({ size, avatarTemplate }); +}); diff --git a/app/assets/javascripts/discourse/helpers/bound-avatar.js.es6 b/app/assets/javascripts/discourse/helpers/bound-avatar.js.es6 new file mode 100644 index 00000000000..50959e8fb5d --- /dev/null +++ b/app/assets/javascripts/discourse/helpers/bound-avatar.js.es6 @@ -0,0 +1,10 @@ +import { htmlHelper } from 'discourse/lib/helpers'; + +export default htmlHelper((user, size) => { + if (Ember.isEmpty(user)) { + return "
    "; + } + + const avatarTemplate = Em.get(user, 'avatar_template'); + return Discourse.Utilities.avatarImg({ size, avatarTemplate }); +}); diff --git a/app/assets/javascripts/discourse/helpers/bound-category-link.js.es6 b/app/assets/javascripts/discourse/helpers/bound-category-link.js.es6 new file mode 100644 index 00000000000..5d215405b26 --- /dev/null +++ b/app/assets/javascripts/discourse/helpers/bound-category-link.js.es6 @@ -0,0 +1,4 @@ +import { htmlHelper } from 'discourse/lib/helpers'; +import { categoryLinkHTML } from 'discourse/helpers/category-link'; + +export default htmlHelper(categoryLinkHTML); diff --git a/app/assets/javascripts/discourse/helpers/bound-date.js.es6 b/app/assets/javascripts/discourse/helpers/bound-date.js.es6 index 3804f04ddd8..b4f75cffc4c 100644 --- a/app/assets/javascripts/discourse/helpers/bound-date.js.es6 +++ b/app/assets/javascripts/discourse/helpers/bound-date.js.es6 @@ -1,5 +1,4 @@ import { autoUpdatingRelativeAge } from 'discourse/lib/formatter'; +import { htmlHelper } from 'discourse/lib/helpers'; -export default Ember.Handlebars.makeBoundHelper(function(dt) { - return new Handlebars.SafeString(autoUpdatingRelativeAge(new Date(dt), {format: 'medium', title: true })); -}); +export default htmlHelper(dt => autoUpdatingRelativeAge(new Date(dt), {format: 'medium', title: true })); diff --git a/app/assets/javascripts/discourse/helpers/bound-i18n.js.es6 b/app/assets/javascripts/discourse/helpers/bound-i18n.js.es6 deleted file mode 100644 index 4061a474d4d..00000000000 --- a/app/assets/javascripts/discourse/helpers/bound-i18n.js.es6 +++ /dev/null @@ -1,3 +0,0 @@ -Ember.Handlebars.registerBoundHelper("boundI18n", function(property, options) { - return new Handlebars.SafeString(I18n.t(property, options.hash)); -}); diff --git a/app/assets/javascripts/discourse/helpers/capitalize-string.js.es6 b/app/assets/javascripts/discourse/helpers/capitalize-string.js.es6 new file mode 100644 index 00000000000..3914e405bd8 --- /dev/null +++ b/app/assets/javascripts/discourse/helpers/capitalize-string.js.es6 @@ -0,0 +1,3 @@ +import { htmlHelper } from 'discourse/lib/helpers'; + +export default htmlHelper(str => str[0].toUpperCase() + str.slice(1)); diff --git a/app/assets/javascripts/discourse/helpers/capitalize.js.es6 b/app/assets/javascripts/discourse/helpers/capitalize.js.es6 deleted file mode 100644 index 97765d0c586..00000000000 --- a/app/assets/javascripts/discourse/helpers/capitalize.js.es6 +++ /dev/null @@ -1,3 +0,0 @@ -Ember.Handlebars.registerBoundHelper("capitalize", function(str) { - return str[0].toUpperCase() + str.slice(1); -}); diff --git a/app/assets/javascripts/discourse/helpers/category-badge.js.es6 b/app/assets/javascripts/discourse/helpers/category-badge.js.es6 index 1a31c448365..c716537a6d3 100644 --- a/app/assets/javascripts/discourse/helpers/category-badge.js.es6 +++ b/app/assets/javascripts/discourse/helpers/category-badge.js.es6 @@ -1,5 +1,5 @@ import { categoryLinkHTML } from 'discourse/helpers/category-link'; -import registerUnbound from 'discourse/helpers/register-unbound'; +import { registerUnbound } from 'discourse/lib/helpers'; registerUnbound('category-badge', function(cat, options) { options.link = false; diff --git a/app/assets/javascripts/discourse/helpers/category-link.js.es6 b/app/assets/javascripts/discourse/helpers/category-link.js.es6 index 1155a2b7bb6..bc184157485 100644 --- a/app/assets/javascripts/discourse/helpers/category-link.js.es6 +++ b/app/assets/javascripts/discourse/helpers/category-link.js.es6 @@ -1,4 +1,4 @@ -import registerUnbound from 'discourse/helpers/register-unbound'; +import { registerUnbound } from 'discourse/lib/helpers'; import { iconHTML } from 'discourse/helpers/fa-icon'; var get = Em.get, @@ -94,4 +94,3 @@ export function categoryLinkHTML(category, options) { } registerUnbound('category-link', categoryLinkHTML); -Ember.Handlebars.helper('bound-category-link', categoryLinkHTML); diff --git a/app/assets/javascripts/discourse/helpers/cold-age-class.js.es6 b/app/assets/javascripts/discourse/helpers/cold-age-class.js.es6 index 5fd1a3b8616..54c23bfb63b 100644 --- a/app/assets/javascripts/discourse/helpers/cold-age-class.js.es6 +++ b/app/assets/javascripts/discourse/helpers/cold-age-class.js.es6 @@ -1,4 +1,4 @@ -import registerUnbound from 'discourse/helpers/register-unbound'; +import { registerUnbound } from 'discourse/lib/helpers'; function daysSinceEpoch(dt) { // 1000 * 60 * 60 * 24 = days since epoch diff --git a/app/assets/javascripts/discourse/helpers/cook-text.js.es6 b/app/assets/javascripts/discourse/helpers/cook-text.js.es6 index a3756c3bd5b..f63206bd944 100644 --- a/app/assets/javascripts/discourse/helpers/cook-text.js.es6 +++ b/app/assets/javascripts/discourse/helpers/cook-text.js.es6 @@ -1,4 +1,4 @@ -import registerUnbound from 'discourse/helpers/register-unbound'; +import { registerUnbound } from 'discourse/lib/helpers'; registerUnbound('cook-text', function(text) { return new Handlebars.SafeString(Discourse.Markdown.cook(text, {sanitize: true})); diff --git a/app/assets/javascripts/discourse/helpers/custom-html.js.es6 b/app/assets/javascripts/discourse/helpers/custom-html.js.es6 index 90427ff625d..ef11f294ae2 100644 --- a/app/assets/javascripts/discourse/helpers/custom-html.js.es6 +++ b/app/assets/javascripts/discourse/helpers/custom-html.js.es6 @@ -1,3 +1,5 @@ +import { registerHelper } from 'discourse/lib/helpers'; + const _customizations = {}; export function getCustomHTML(key) { @@ -17,13 +19,14 @@ export function setCustomHTML(key, html) { _customizations[key] = html; } -Ember.HTMLBars._registerHelper('custom-html', function(params, hash, options, env) { +registerHelper('custom-html', function(params, hash, options, env) { const name = params[0]; const html = getCustomHTML(name); if (html) { return html; } const contextString = params[1]; - const container = (env || contextString).data.view.container; + const target = (env || contextString); + const container = target.container || target.data.view.container; if (container.lookup('template:' + name)) { return env.helpers.partial.helperFunction.apply(this, arguments); } diff --git a/app/assets/javascripts/discourse/helpers/dash-if-empty.js.es6 b/app/assets/javascripts/discourse/helpers/dash-if-empty.js.es6 index a018479e7de..fd694261d37 100644 --- a/app/assets/javascripts/discourse/helpers/dash-if-empty.js.es6 +++ b/app/assets/javascripts/discourse/helpers/dash-if-empty.js.es6 @@ -1,3 +1,3 @@ -export default Ember.Handlebars.makeBoundHelper(function(str) { - return Ember.isEmpty(str) ? new Handlebars.SafeString('—') : str; -}); +import { htmlHelper } from 'discourse/lib/helpers'; + +export default htmlHelper(str => Ember.isEmpty(str) ? '—' : str); diff --git a/app/assets/javascripts/discourse/helpers/discouse-tag.js.es6 b/app/assets/javascripts/discourse/helpers/discouse-tag.js.es6 index b6d9d355243..1221da2417e 100644 --- a/app/assets/javascripts/discourse/helpers/discouse-tag.js.es6 +++ b/app/assets/javascripts/discourse/helpers/discouse-tag.js.es6 @@ -1,4 +1,4 @@ -import registerUnbound from 'discourse/helpers/register-unbound'; +import { registerUnbound } from 'discourse/lib/helpers'; import renderTag from 'discourse/lib/render-tag'; export default registerUnbound('discourse-tag', function(name, params) { diff --git a/app/assets/javascripts/discourse/helpers/fa-icon.js.es6 b/app/assets/javascripts/discourse/helpers/fa-icon.js.es6 index fa35b02d9b5..1d6a4e02ea3 100644 --- a/app/assets/javascripts/discourse/helpers/fa-icon.js.es6 +++ b/app/assets/javascripts/discourse/helpers/fa-icon.js.es6 @@ -1,5 +1,5 @@ import { h } from 'virtual-dom'; -import registerUnbound from 'discourse/helpers/register-unbound'; +import { registerUnbound } from 'discourse/lib/helpers'; function iconClasses(icon, params) { var classes = "fa fa-" + icon; @@ -37,11 +37,6 @@ export function iconNode(icon, params) { } } - -Ember.Handlebars.helper('fa-icon-bound', function(value, options) { - return new Handlebars.SafeString(iconHTML(value, options)); -}); - registerUnbound('fa-icon', function(icon, params) { return new Handlebars.SafeString(iconHTML(icon, params)); }); diff --git a/app/assets/javascripts/discourse/helpers/format-age.js.es6 b/app/assets/javascripts/discourse/helpers/format-age.js.es6 index 42d2a612a80..69247fb5f53 100644 --- a/app/assets/javascripts/discourse/helpers/format-age.js.es6 +++ b/app/assets/javascripts/discourse/helpers/format-age.js.es6 @@ -1,5 +1,5 @@ import { autoUpdatingRelativeAge } from 'discourse/lib/formatter'; -import registerUnbound from 'discourse/helpers/register-unbound'; +import { registerUnbound } from 'discourse/lib/helpers'; registerUnbound('format-age', function(dt) { dt = new Date(dt); diff --git a/app/assets/javascripts/discourse/helpers/format-date.js.es6 b/app/assets/javascripts/discourse/helpers/format-date.js.es6 index 1937c441991..feb207c2a5f 100644 --- a/app/assets/javascripts/discourse/helpers/format-date.js.es6 +++ b/app/assets/javascripts/discourse/helpers/format-date.js.es6 @@ -1,4 +1,4 @@ -import registerUnbound from 'discourse/helpers/register-unbound'; +import { registerUnbound } from 'discourse/lib/helpers'; import { autoUpdatingRelativeAge } from 'discourse/lib/formatter'; /** diff --git a/app/assets/javascripts/discourse/helpers/i18n.js.es6 b/app/assets/javascripts/discourse/helpers/i18n.js.es6 index ebe7ba6e518..943e2ff87a4 100644 --- a/app/assets/javascripts/discourse/helpers/i18n.js.es6 +++ b/app/assets/javascripts/discourse/helpers/i18n.js.es6 @@ -1,4 +1,4 @@ -import registerUnbound from 'discourse/helpers/register-unbound'; +import { registerUnbound } from 'discourse/lib/helpers'; registerUnbound('i18n', function(key, params) { return I18n.t(key, params); diff --git a/app/assets/javascripts/discourse/helpers/icon-or-image.js.es6 b/app/assets/javascripts/discourse/helpers/icon-or-image.js.es6 index 7a6ebc0ebfd..5f4c6cbce8b 100644 --- a/app/assets/javascripts/discourse/helpers/icon-or-image.js.es6 +++ b/app/assets/javascripts/discourse/helpers/icon-or-image.js.es6 @@ -1,9 +1,6 @@ -export default Ember.Handlebars.makeBoundHelper(function(str) { - if (Ember.isEmpty(str)) { return ""; } +import { htmlHelper } from 'discourse/lib/helpers'; - if (str.indexOf('fa-') === 0) { - return new Handlebars.SafeString(""); - } else { - return new Handlebars.SafeString(""); - } +export default htmlHelper(function(str) { + if (Ember.isEmpty(str)) { return ""; } + return (str.indexOf('fa-') === 0) ? `` : ``; }); diff --git a/app/assets/javascripts/discourse/helpers/loading-spinner.es6 b/app/assets/javascripts/discourse/helpers/loading-spinner.es6 index 86ffcc89f11..05dfd735bd8 100644 --- a/app/assets/javascripts/discourse/helpers/loading-spinner.es6 +++ b/app/assets/javascripts/discourse/helpers/loading-spinner.es6 @@ -1,3 +1,5 @@ +import { htmlHelper } from 'discourse/lib/helpers'; + function renderSpinner(cssClass) { var html = "
    { const hash = params.hash; - return new Handlebars.SafeString(renderSpinner((hash && hash.size) ? hash.size : undefined)); + return renderSpinner((hash && hash.size) ? hash.size : undefined); }); export { spinnerHTML, renderSpinner }; diff --git a/app/assets/javascripts/discourse/helpers/max-usernames.js.es6 b/app/assets/javascripts/discourse/helpers/max-usernames.js.es6 index 4eb136e2afa..fd4b6819cdf 100644 --- a/app/assets/javascripts/discourse/helpers/max-usernames.js.es6 +++ b/app/assets/javascripts/discourse/helpers/max-usernames.js.es6 @@ -1,4 +1,4 @@ -import registerUnbound from 'discourse/helpers/register-unbound'; +import { registerUnbound } from 'discourse/lib/helpers'; registerUnbound('max-usernames', function(usernames, params) { var maxLength = parseInt(params.max) || 3; diff --git a/app/assets/javascripts/discourse/helpers/period-title.js.es6 b/app/assets/javascripts/discourse/helpers/period-title.js.es6 index d8267547a77..ee18503b062 100644 --- a/app/assets/javascripts/discourse/helpers/period-title.js.es6 +++ b/app/assets/javascripts/discourse/helpers/period-title.js.es6 @@ -1,3 +1,5 @@ +import { htmlHelper } from 'discourse/lib/helpers'; + const TITLE_SUBS = { all: 'all_time', yearly: 'this_year', @@ -6,7 +8,7 @@ const TITLE_SUBS = { daily: 'today', }; -export default Ember.Handlebars.makeBoundHelper(function (period, options) { +export default htmlHelper((period, options) => { const title = I18n.t('filters.top.' + (TITLE_SUBS[period] || 'this_week')); if (options.hash.showDateRange) { var dateString = ""; @@ -27,8 +29,9 @@ export default Ember.Handlebars.makeBoundHelper(function (period, options) { dateString = moment().format(I18n.t('dates.full_no_year_no_time')); break; } - return new Handlebars.SafeString(title + " " + dateString + ""); + + return `${title} ${dateString}`; } else { - return new Handlebars.SafeString(title); + return title; } }); diff --git a/app/assets/javascripts/discourse/helpers/plugin-outlet.js.es6 b/app/assets/javascripts/discourse/helpers/plugin-outlet.js.es6 index f55beeba54c..b15685f0e6c 100644 --- a/app/assets/javascripts/discourse/helpers/plugin-outlet.js.es6 +++ b/app/assets/javascripts/discourse/helpers/plugin-outlet.js.es6 @@ -46,13 +46,7 @@ The list of disabled plugins is returned via the `Site` singleton. **/ - -// TODO: Add all plugin-outlet names dynamically -const rewireableOutlets = [ - 'hamburger-admin' -]; - -const _rewires = {}; +import { registerHelper } from 'discourse/lib/helpers'; let _connectorCache, _rawCache; @@ -73,14 +67,6 @@ function findOutlets(collection, callback) { let outletName = segments[segments.length-2]; const uniqueName = segments[segments.length-1]; - const outletRewires = _rewires[outletName]; - if (outletRewires) { - const newOutlet = outletRewires[uniqueName]; - if (newOutlet) { - outletName = newOutlet; - } - } - callback(outletName, res, uniqueName); } }); @@ -144,7 +130,6 @@ function viewInjections(container) { // unbound version of outlets, only has a template Handlebars.registerHelper('plugin-outlet', function(name){ - if (!_rawCache) { buildConnectorCache(); } const functions = _rawCache[name]; @@ -160,7 +145,7 @@ Handlebars.registerHelper('plugin-outlet', function(name){ }); -Ember.HTMLBars._registerHelper('plugin-outlet', function(params, hash, options, env) { +registerHelper('plugin-outlet', function(params, hash, options, env) { const connectionName = params[0]; if (!_connectorCache) { buildConnectorCache(); } @@ -190,11 +175,5 @@ Ember.HTMLBars._registerHelper('plugin-outlet', function(params, hash, options, } }); -// Allow plugins to rewire outlets to new outlets if they exist. For example, the akismet -// plugin will use `hamburger-admin` if it exists, otherwise `site-menu-links` -export function rewire(uniqueName, outlet, wantedOutlet) { - if (rewireableOutlets.indexOf(wantedOutlet) !== -1) { - _rewires[outlet] = _rewires[outlet] || {}; - _rewires[outlet][uniqueName] = wantedOutlet; - } -} +// No longer used +export function rewire() { } diff --git a/app/assets/javascripts/discourse/helpers/raw.js.es6 b/app/assets/javascripts/discourse/helpers/raw.js.es6 index fbef46ff04d..b7c89470f7b 100644 --- a/app/assets/javascripts/discourse/helpers/raw.js.es6 +++ b/app/assets/javascripts/discourse/helpers/raw.js.es6 @@ -1,4 +1,4 @@ -import registerUnbound from 'discourse/helpers/register-unbound'; +import { registerUnbound } from 'discourse/lib/helpers'; // see: https://github.com/emberjs/ember.js/issues/12634 var missingViews = {}; diff --git a/app/assets/javascripts/discourse/helpers/shorten-url.js.es6 b/app/assets/javascripts/discourse/helpers/shorten-url.js.es6 index 39152fd7370..4862b04d78d 100644 --- a/app/assets/javascripts/discourse/helpers/shorten-url.js.es6 +++ b/app/assets/javascripts/discourse/helpers/shorten-url.js.es6 @@ -1,4 +1,4 @@ -import registerUnbound from 'discourse/helpers/register-unbound'; +import { registerUnbound } from 'discourse/lib/helpers'; registerUnbound('shorten-url', function(url) { var matches = url.match(/\//g); diff --git a/app/assets/javascripts/discourse/helpers/topic-link.js.es6 b/app/assets/javascripts/discourse/helpers/topic-link.js.es6 index 579aecf4dff..ca03e990d0c 100644 --- a/app/assets/javascripts/discourse/helpers/topic-link.js.es6 +++ b/app/assets/javascripts/discourse/helpers/topic-link.js.es6 @@ -1,4 +1,4 @@ -import registerUnbound from 'discourse/helpers/register-unbound'; +import { registerUnbound } from 'discourse/lib/helpers'; registerUnbound('topic-link', function(topic) { var title = topic.get('fancyTitle'); diff --git a/app/assets/javascripts/discourse/helpers/user-avatar.js.es6 b/app/assets/javascripts/discourse/helpers/user-avatar.js.es6 index c5eac31ad61..2388f45a685 100644 --- a/app/assets/javascripts/discourse/helpers/user-avatar.js.es6 +++ b/app/assets/javascripts/discourse/helpers/user-avatar.js.es6 @@ -1,4 +1,4 @@ -import registerUnbound from 'discourse/helpers/register-unbound'; +import { registerUnbound } from 'discourse/lib/helpers'; function renderAvatar(user, options) { options = options || {}; diff --git a/app/assets/javascripts/discourse/helpers/user-status.js.es6 b/app/assets/javascripts/discourse/helpers/user-status.js.es6 index e40197b7b51..2c388b31642 100644 --- a/app/assets/javascripts/discourse/helpers/user-status.js.es6 +++ b/app/assets/javascripts/discourse/helpers/user-status.js.es6 @@ -1,17 +1,16 @@ import { iconHTML } from 'discourse/helpers/fa-icon'; +import { htmlHelper } from 'discourse/lib/helpers'; -const Safe = Handlebars.SafeString; - -export default Ember.Handlebars.makeBoundHelper(function(user, args) { +export default htmlHelper((user, args) => { if (!user) { return; } const name = Discourse.Utilities.escapeExpression(user.get('name')); const currentUser = args.hash.currentUser; if (currentUser && user.get('admin') && currentUser.get('staff')) { - return new Safe(iconHTML('shield', { label: I18n.t('user.admin', { user: name }) })); + return iconHTML('shield', { label: I18n.t('user.admin', { user: name }) }); } if (user.get('moderator')) { - return new Safe(iconHTML('shield', { label: I18n.t('user.moderator', { user: name }) })); + return iconHTML('shield', { label: I18n.t('user.moderator', { user: name }) }); } }); diff --git a/app/assets/javascripts/discourse/lib/ember_compat_handlebars.js b/app/assets/javascripts/discourse/lib/ember_compat_handlebars.js index 23875153c84..6539100a491 100644 --- a/app/assets/javascripts/discourse/lib/ember_compat_handlebars.js +++ b/app/assets/javascripts/discourse/lib/ember_compat_handlebars.js @@ -148,7 +148,8 @@ RawHandlebars.get = function(ctx, property, options){ if (options.types && options.data.view) { - return options.data.view.getStream(property).value(); + var view = options.data.view; + return view.getStream ? view.getStream(property).value() : view.getAttr(property); } else { return Ember.get(ctx, property); } diff --git a/app/assets/javascripts/discourse/helpers/register-unbound.js.es6 b/app/assets/javascripts/discourse/lib/helpers.js.es6 similarity index 61% rename from app/assets/javascripts/discourse/helpers/register-unbound.js.es6 rename to app/assets/javascripts/discourse/lib/helpers.js.es6 index 3db687c5205..5ae2cbe1654 100644 --- a/app/assets/javascripts/discourse/helpers/register-unbound.js.es6 +++ b/app/assets/javascripts/discourse/lib/helpers.js.es6 @@ -1,3 +1,20 @@ +// `Ember.Helper` is only available in versions after 1.12 +export function htmlHelper(fn) { + if (Ember.Helper) { + return Ember.Helper.helper(function() { + return new Handlebars.SafeString(fn.apply(this, Array.prototype.slice.call(arguments))); + }); + } else { + return Ember.Handlebars.makeBoundHelper(function() { + return new Handlebars.SafeString(fn.apply(this, Array.prototype.slice.call(arguments))); + }); + } +} + +export function registerHelper(name, fn) { + Ember.HTMLBars._registerHelper(name, fn); +} + const get = Discourse.EmberCompatHandlebars.get; function resolveParams(ctx, options) { @@ -21,7 +38,7 @@ function resolveParams(ctx, options) { return params; } -export default function registerUnbound(name, fn) { +export function registerUnbound(name, fn) { const func = function(property, options) { if (options.types && (options.types[0] === "ID" || options.types[0] === "PathExpression")) { property = get(this, property, options); diff --git a/app/assets/javascripts/discourse/templates/modal/history.hbs b/app/assets/javascripts/discourse/templates/modal/history.hbs index e9820aab8fd..1b005e13dea 100644 --- a/app/assets/javascripts/discourse/templates/modal/history.hbs +++ b/app/assets/javascripts/discourse/templates/modal/history.hbs @@ -5,7 +5,7 @@ {{d-button action="loadPreviousVersion" icon="backward" title="post.revisions.controls.previous" disabled=loadPreviousDisabled}}
    {{#conditional-loading-spinner condition=loading size="small"}} - {{boundI18n revisionsTextKey previous=previousVersion current=model.current_version total=model.version_count}} + {{{revisionsText}}} {{/conditional-loading-spinner}}
    {{d-button action="loadNextVersion" icon="forward" title="post.revisions.controls.next" disabled=loadNextDisabled}} diff --git a/app/assets/javascripts/discourse/templates/user/messages.hbs b/app/assets/javascripts/discourse/templates/user/messages.hbs index 9f4c6b62f85..56f03b2e618 100644 --- a/app/assets/javascripts/discourse/templates/user/messages.hbs +++ b/app/assets/javascripts/discourse/templates/user/messages.hbs @@ -26,7 +26,7 @@
  • {{#link-to 'userPrivateMessages.group' group.name}} - {{capitalize group.name}} + {{capitalize-string group.name}} {{/link-to}}
  • diff --git a/app/assets/javascripts/main_include.js b/app/assets/javascripts/main_include.js index 0af76b9aaf0..7aad77c3c5f 100644 --- a/app/assets/javascripts/main_include.js +++ b/app/assets/javascripts/main_include.js @@ -14,14 +14,14 @@ //= require ./discourse/lib/debounce //= require ./discourse/lib/quote //= require ./discourse/lib/key-value-store +//= require ./discourse/lib/helpers //= require ./discourse/helpers/i18n //= require ./discourse/helpers/fa-icon -//= require ./discourse/helpers/register-unbound //= require ./discourse/lib/ember_compat_handlebars +//= require ./discourse/lib/helpers //= require ./discourse/lib/computed //= require ./discourse/lib/formatter //= require ./discourse/lib/eyeline -//= require ./discourse/helpers/register-unbound //= require ./discourse/mixins/scrolling //= require ./discourse/models/model //= require ./discourse/models/rest @@ -88,7 +88,6 @@ //= require ./discourse/components/conditional-loading-spinner //= require ./discourse/helpers/user-avatar //= require ./discourse/helpers/cold-age-class -//= require ./discourse/helpers/capitalize //= require ./discourse/helpers/loading-spinner //= require ./discourse/helpers/category-link //= require ./discourse/lib/export-result diff --git a/plugins/poll/assets/javascripts/components/poll-results-standard.js.es6 b/plugins/poll/assets/javascripts/components/poll-results-standard.js.es6 index 0e44215049f..47f0d5ba5af 100644 --- a/plugins/poll/assets/javascripts/components/poll-results-standard.js.es6 +++ b/plugins/poll/assets/javascripts/components/poll-results-standard.js.es6 @@ -24,7 +24,7 @@ export default Em.Component.extend({ options.forEach((option, i) => { const percentage = percentages[i]; - const style = new Ember.Handlebars.SafeString(`width: ${percentage}%`); + const style = new Handlebars.SafeString(`width: ${percentage}%`); option.setProperties({ percentage,