From be1d74d20772e3a4ed2b3daed9700249024a133f Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Wed, 31 Aug 2016 11:30:51 -0400 Subject: [PATCH] Split out common functions into `discourse-common` module --- .../admin/helpers/human-size.js.es6 | 2 +- .../admin/helpers/preserve-newlines.js.es6 | 2 +- .../admin/helpers/value-at-tl.js.es6 | 2 +- .../helpers/fa-icon.js.es6 | 24 +- .../helpers/i18n.js.es6 | 2 +- .../lib/helpers.js.es6 | 2 +- .../lib/raw-handlebars.js.es6 | 0 .../discourse-common/resolver.js.es6 | 218 ++++++++++++++++++ app/assets/javascripts/discourse.js.es6 | 4 +- .../categories-admin-dropdown.js.es6 | 2 +- .../discourse/components/d-button.js.es6 | 2 +- .../discourse/components/d-link.js.es6 | 2 +- .../components/directory-toggle.js.es6 | 2 +- .../discourse/components/global-notice.js.es6 | 2 +- .../discourse/components/input-tip.js.es6 | 2 +- .../components/notifications-button.js.es6 | 2 +- .../components/popup-input-tip.js.es6 | 2 +- .../components/tags-admin-dropdown.js.es6 | 2 +- .../topic-footer-mobile-dropdown.js.es6 | 2 +- .../discourse/components/topic-status.js.es6 | 2 +- .../discourse/ember/resolver.js.es6 | 206 ----------------- .../discourse/helpers/application.js.es6 | 2 +- .../discourse/helpers/border-color.js.es6 | 2 +- .../helpers/bound-avatar-template.js.es6 | 2 +- .../discourse/helpers/bound-avatar.js.es6 | 2 +- .../helpers/bound-category-link.js.es6 | 2 +- .../discourse/helpers/bound-date.js.es6 | 2 +- .../helpers/capitalize-string.js.es6 | 2 +- .../discourse/helpers/category-badge.js.es6 | 2 +- .../discourse/helpers/category-link.js.es6 | 4 +- .../discourse/helpers/cold-age-class.js.es6 | 2 +- .../discourse/helpers/cook-text.js.es6 | 2 +- .../discourse/helpers/custom-html.js.es6 | 2 +- .../discourse/helpers/dash-if-empty.js.es6 | 2 +- .../discourse/helpers/discouse-tag.js.es6 | 2 +- .../discourse/helpers/fa-icon-node.js.es6 | 20 ++ .../discourse/helpers/format-age.js.es6 | 2 +- .../discourse/helpers/format-date.js.es6 | 2 +- .../discourse/helpers/icon-or-image.js.es6 | 2 +- .../discourse/helpers/loading-spinner.es6 | 2 +- .../discourse/helpers/max-usernames.js.es6 | 2 +- .../discourse/helpers/period-title.js.es6 | 2 +- .../discourse/helpers/plugin-outlet.js.es6 | 2 +- .../javascripts/discourse/helpers/raw.js.es6 | 2 +- .../{i18n.js.es6 => replace-emoji.js.es6} | 3 +- .../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 | 4 +- .../discourse/lib/plugin-api.js.es6 | 2 +- .../{router.js.es6 => mapping-router.js.es6} | 0 .../pre-initializers/map-routes.js.es6 | 2 +- .../discourse/views/bookmark-button.js.es6 | 2 +- .../discourse/views/flag-topic-button.js.es6 | 2 +- .../views/invite-reply-button.js.es6 | 2 +- .../discourse/views/share-button.js.es6 | 2 +- .../discourse/widgets/actions-summary.js.es6 | 2 +- .../discourse/widgets/button.js.es6 | 2 +- .../discourse/widgets/embedded-post.js.es6 | 2 +- .../widgets/header-topic-info.js.es6 | 2 +- .../discourse/widgets/header.js.es6 | 2 +- .../discourse/widgets/home-logo.js.es6 | 2 +- .../javascripts/discourse/widgets/link.js.es6 | 2 +- .../discourse/widgets/post-admin-menu.js.es6 | 2 +- .../widgets/post-edits-indicator.js.es6 | 2 +- .../discourse/widgets/post-links.js.es6 | 2 +- .../widgets/post-small-action.js.es6 | 2 +- .../javascripts/discourse/widgets/post.js.es6 | 2 +- .../discourse/widgets/poster-name.js.es6 | 2 +- .../widgets/private-message-map.js.es6 | 2 +- .../widgets/search-menu-results.js.es6 | 2 +- .../discourse/widgets/time-gap.js.es6 | 2 +- .../discourse/widgets/topic-status.js.es6 | 2 +- .../discourse/widgets/topic-timeline.js.es6 | 2 +- app/assets/javascripts/main_include.js | 8 +- app/assets/javascripts/wizard-application.js | 5 +- .../javascripts/wizard/models/wizard.js.es6 | 1 - app/assets/javascripts/wizard/resolver.js.es6 | 26 --- app/assets/javascripts/wizard/router.js.es6 | 4 +- .../templates/components/wizard-step.hbs | 4 +- .../javascripts/wizard/test/test_helper.js | 1 + app/assets/javascripts/wizard/wizard.js.es6 | 6 +- app/models/site_customization.rb | 2 +- lib/freedom_patches/raw_handlebars.rb | 6 +- .../javascripts/components/poll-option.js.es6 | 2 +- test/javascripts/ember/resolver-test.js.es6 | 4 +- test/javascripts/helpers/create-store.js.es6 | 4 +- test/javascripts/helpers/init-ember-qunit.js | 4 +- test/javascripts/test_helper.js | 1 - 89 files changed, 335 insertions(+), 354 deletions(-) rename app/assets/javascripts/{discourse => discourse-common}/helpers/fa-icon.js.es6 (54%) rename app/assets/javascripts/{wizard => discourse-common}/helpers/i18n.js.es6 (50%) rename app/assets/javascripts/{discourse => discourse-common}/lib/helpers.js.es6 (96%) rename app/assets/javascripts/{discourse => discourse-common}/lib/raw-handlebars.js.es6 (100%) create mode 100644 app/assets/javascripts/discourse-common/resolver.js.es6 delete mode 100644 app/assets/javascripts/discourse/ember/resolver.js.es6 create mode 100644 app/assets/javascripts/discourse/helpers/fa-icon-node.js.es6 rename app/assets/javascripts/discourse/helpers/{i18n.js.es6 => replace-emoji.js.es6} (54%) rename app/assets/javascripts/discourse/{router.js.es6 => mapping-router.js.es6} (100%) delete mode 100644 app/assets/javascripts/wizard/resolver.js.es6 diff --git a/app/assets/javascripts/admin/helpers/human-size.js.es6 b/app/assets/javascripts/admin/helpers/human-size.js.es6 index a43897c62..a50cfe581 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 @@ -import { htmlHelper } from 'discourse/lib/helpers'; +import { htmlHelper } from 'discourse-common/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 73bac4337..b58e9a552 100644 --- a/app/assets/javascripts/admin/helpers/preserve-newlines.js.es6 +++ b/app/assets/javascripts/admin/helpers/preserve-newlines.js.es6 @@ -1,4 +1,4 @@ -import { htmlHelper } from 'discourse/lib/helpers'; +import { htmlHelper } from 'discourse-common/lib/helpers'; import { escapeExpression } from 'discourse/lib/utilities'; export default htmlHelper(str => 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 aeac49e83..48d2271ca 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/lib/helpers'; +import { registerUnbound } from 'discourse-common/lib/helpers'; registerUnbound('value-at-tl', function(data, params) { var tl = parseInt(params.level, 10); diff --git a/app/assets/javascripts/discourse/helpers/fa-icon.js.es6 b/app/assets/javascripts/discourse-common/helpers/fa-icon.js.es6 similarity index 54% rename from app/assets/javascripts/discourse/helpers/fa-icon.js.es6 rename to app/assets/javascripts/discourse-common/helpers/fa-icon.js.es6 index 043c6a50e..3c1f8b9b5 100644 --- a/app/assets/javascripts/discourse/helpers/fa-icon.js.es6 +++ b/app/assets/javascripts/discourse-common/helpers/fa-icon.js.es6 @@ -1,8 +1,7 @@ -import { h } from 'virtual-dom'; -import { registerUnbound } from 'discourse/lib/helpers'; +import { registerUnbound } from 'discourse-common/lib/helpers'; -function iconClasses(icon, params) { - var classes = "fa fa-" + icon; +export function iconClasses(icon, params) { + let classes = "fa fa-" + icon; if (params.modifier) { classes += " fa-" + params.modifier; } if (params['class']) { classes += ' ' + params['class']; } return classes; @@ -21,23 +20,6 @@ export function iconHTML(icon, params) { return html; } -export function iconNode(icon, params) { - params = params || {}; - - const properties = { - className: iconClasses(icon, params), - attributes: { "aria-hidden": true } - }; - - if (params.title) { properties.attributes.title = params.title; } - - if (params.label) { - return h('i', properties, h('span.sr-only', I18n.t(params.label))); - } else { - return h('i', properties); - } -} - registerUnbound('fa-icon', function(icon, params) { return new Handlebars.SafeString(iconHTML(icon, params)); }); diff --git a/app/assets/javascripts/wizard/helpers/i18n.js.es6 b/app/assets/javascripts/discourse-common/helpers/i18n.js.es6 similarity index 50% rename from app/assets/javascripts/wizard/helpers/i18n.js.es6 rename to app/assets/javascripts/discourse-common/helpers/i18n.js.es6 index 21d53160f..455cc65a3 100644 --- a/app/assets/javascripts/wizard/helpers/i18n.js.es6 +++ b/app/assets/javascripts/discourse-common/helpers/i18n.js.es6 @@ -1,3 +1,3 @@ -import { registerUnbound } from 'discourse/lib/helpers'; +import { registerUnbound } from 'discourse-common/lib/helpers'; registerUnbound('i18n', (key, params) => I18n.t(key, params)); diff --git a/app/assets/javascripts/discourse/lib/helpers.js.es6 b/app/assets/javascripts/discourse-common/lib/helpers.js.es6 similarity index 96% rename from app/assets/javascripts/discourse/lib/helpers.js.es6 rename to app/assets/javascripts/discourse-common/lib/helpers.js.es6 index 9eccf5651..45c065124 100644 --- a/app/assets/javascripts/discourse/lib/helpers.js.es6 +++ b/app/assets/javascripts/discourse-common/lib/helpers.js.es6 @@ -1,4 +1,4 @@ -import { get } from 'discourse/lib/raw-handlebars'; +import { get } from 'discourse-common/lib/raw-handlebars'; // `Ember.Helper` is only available in versions after 1.12 export function htmlHelper(fn) { diff --git a/app/assets/javascripts/discourse/lib/raw-handlebars.js.es6 b/app/assets/javascripts/discourse-common/lib/raw-handlebars.js.es6 similarity index 100% rename from app/assets/javascripts/discourse/lib/raw-handlebars.js.es6 rename to app/assets/javascripts/discourse-common/lib/raw-handlebars.js.es6 diff --git a/app/assets/javascripts/discourse-common/resolver.js.es6 b/app/assets/javascripts/discourse-common/resolver.js.es6 new file mode 100644 index 000000000..fdf1a1abe --- /dev/null +++ b/app/assets/javascripts/discourse-common/resolver.js.es6 @@ -0,0 +1,218 @@ +/* global requirejs, require */ + +var classify = Ember.String.classify; +var get = Ember.get; + +var LOADING_WHITELIST = ['badges', 'userActivity', 'userPrivateMessages', 'admin', 'adminFlags', + 'user', 'preferences', 'adminEmail', 'adminUsersList']; +var _dummyRoute; +var _loadingView; + +function loadingResolver(cb) { + return function(parsedName) { + var fullNameWithoutType = parsedName.fullNameWithoutType; + + if (fullNameWithoutType.indexOf('Loading') >= 0) { + fullNameWithoutType = fullNameWithoutType.replace('Loading', ''); + if (LOADING_WHITELIST.indexOf(fullNameWithoutType) !== -1) { + return cb(fullNameWithoutType); + } + } + }; +} + +function parseName(fullName) { + const nameParts = fullName.split(":"), + type = nameParts[0], fullNameWithoutType = nameParts[1], + name = fullNameWithoutType, + namespace = get(this, 'namespace'), + root = namespace; + + return { + fullName: fullName, + type: type, + fullNameWithoutType: fullNameWithoutType, + name: name, + root: root, + resolveMethodName: "resolve" + classify(type) + }; +} + +export function buildResolver(baseName) { + return Ember.DefaultResolver.extend({ + parseName, + + resolveRouter(parsedName) { + const routerPath = `${baseName}/router`; + if (requirejs.entries[routerPath]) { + const module = require(routerPath, null, null, true); + return module.default; + } + return this._super(parsedName); + }, + + normalize(fullName) { + const split = fullName.split(':'); + if (split.length > 1) { + const appBase = `${baseName}/${split[0]}s/`; + const adminBase = 'admin/' + split[0] + 's/'; + + // Allow render 'admin/templates/xyz' too + split[1] = split[1].replace('.templates', '').replace('/templates', ''); + + // Try slashes + let dashed = Ember.String.dasherize(split[1].replace(/\./g, '/')); + if (requirejs.entries[appBase + dashed] || requirejs.entries[adminBase + dashed]) { + return split[0] + ":" + dashed; + } + + // Try with dashes instead of slashes + dashed = Ember.String.dasherize(split[1].replace(/\./g, '-')); + if (requirejs.entries[appBase + dashed] || requirejs.entries[adminBase + dashed]) { + return split[0] + ":" + dashed; + } + } + return this._super(fullName); + }, + + customResolve(parsedName) { + // If we end with the name we want, use it. This allows us to define components within plugins. + const suffix = parsedName.type + 's/' + parsedName.fullNameWithoutType, + dashed = Ember.String.dasherize(suffix), + moduleName = Object.keys(requirejs.entries).find(function(e) { + return (e.indexOf(suffix, e.length - suffix.length) !== -1) || + (e.indexOf(dashed, e.length - dashed.length) !== -1); + }); + + var module; + if (moduleName) { + module = require(moduleName, null, null, true /* force sync */); + if (module && module['default']) { module = module['default']; } + } + return module; + }, + + resolveWidget(parsedName) { + return this.customResolve(parsedName) || this._super(parsedName); + }, + + resolveAdapter(parsedName) { + return this.customResolve(parsedName) || this._super(parsedName); + }, + + resolveModel(parsedName) { + return this.customResolve(parsedName) || this._super(parsedName); + }, + + resolveView(parsedName) { + return this.findLoadingView(parsedName) || this.customResolve(parsedName) || this._super(parsedName); + }, + + resolveHelper(parsedName) { + return this.customResolve(parsedName) || this._super(parsedName); + }, + + resolveController(parsedName) { + return this.customResolve(parsedName) || this._super(parsedName); + }, + + resolveComponent(parsedName) { + return this.customResolve(parsedName) || this._super(parsedName); + }, + + resolveRoute(parsedName) { + return this.findLoadingRoute(parsedName) || this.customResolve(parsedName) || this._super(parsedName); + }, + + resolveTemplate(parsedName) { + return this.findPluginMobileTemplate(parsedName) || + this.findPluginTemplate(parsedName) || + this.findMobileTemplate(parsedName) || + this.findTemplate(parsedName) || + Ember.TEMPLATES.not_found; + }, + + findLoadingRoute: loadingResolver(function() { + _dummyRoute = _dummyRoute || Ember.Route.extend(); + return _dummyRoute; + }), + + findLoadingView: loadingResolver(function() { + if (!_loadingView) { + _loadingView = require('discourse/views/loading', null, null, true /* force sync */); + if (_loadingView && _loadingView['default']) { _loadingView = _loadingView['default']; } + } + return _loadingView; + }), + + findPluginTemplate(parsedName) { + var pluginParsedName = this.parseName(parsedName.fullName.replace("template:", "template:javascripts/")); + return this.findTemplate(pluginParsedName); + }, + + findPluginMobileTemplate(parsedName) { + if (this.mobileView) { + var pluginParsedName = this.parseName(parsedName.fullName.replace("template:", "template:javascripts/mobile/")); + return this.findTemplate(pluginParsedName); + } + }, + + findMobileTemplate(parsedName) { + if (this.mobileView) { + var mobileParsedName = this.parseName(parsedName.fullName.replace("template:", "template:mobile/")); + return this.findTemplate(mobileParsedName); + } + }, + + findTemplate(parsedName) { + const withoutType = parsedName.fullNameWithoutType, + slashedType = withoutType.replace(/\./g, '/'), + decamelized = withoutType.decamelize(), + dashed = decamelized.replace(/\./g, '-').replace(/\_/g, '-'), + templates = Ember.TEMPLATES; + + return this._super(parsedName) || + templates[slashedType] || + templates[withoutType] || + templates[dashed] || + templates[decamelized.replace(/\./, '/')] || + templates[decamelized.replace(/\_/, '/')] || + templates[`${baseName}/templates/${withoutType}`] || + this.findAdminTemplate(parsedName) || + this.findUnderscoredTemplate(parsedName); + }, + + findUnderscoredTemplate(parsedName) { + var decamelized = parsedName.fullNameWithoutType.decamelize(); + var underscored = decamelized.replace(/\-/g, "_"); + return Ember.TEMPLATES[underscored]; + }, + + // Try to find a template within a special admin namespace, e.g. adminEmail => admin/templates/email + // (similar to how discourse lays out templates) + findAdminTemplate(parsedName) { + var decamelized = parsedName.fullNameWithoutType.decamelize(); + + if (decamelized.indexOf('components') === 0) { + const compTemplate = Ember.TEMPLATES['admin/templates/' + decamelized]; + if (compTemplate) { return compTemplate; } + } + + if (decamelized === "javascripts/admin") { + return Ember.TEMPLATES['admin/templates/admin']; + } + + if (decamelized.indexOf('admin') === 0 || decamelized.indexOf('javascripts/admin') === 0) { + decamelized = decamelized.replace(/^admin\_/, 'admin/templates/'); + decamelized = decamelized.replace(/^admin\./, 'admin/templates/'); + decamelized = decamelized.replace(/\./g, '_'); + + const dashed = decamelized.replace(/_/g, '-'); + return Ember.TEMPLATES[decamelized] || + Ember.TEMPLATES[dashed] || + Ember.TEMPLATES[dashed.replace('admin-', 'admin/')]; + } + } + + }); +} diff --git a/app/assets/javascripts/discourse.js.es6 b/app/assets/javascripts/discourse.js.es6 index 23c233c7c..523b0ee22 100644 --- a/app/assets/javascripts/discourse.js.es6 +++ b/app/assets/javascripts/discourse.js.es6 @@ -1,4 +1,4 @@ -import DiscourseResolver from 'discourse/ember/resolver'; +import { buildResolver } from 'discourse-common/resolver'; import { default as computed, observes } from 'ember-addons/ember-computed-decorators'; const _pluginCallbacks = []; @@ -31,7 +31,7 @@ const Discourse = Ember.Application.extend({ return url; }, - Resolver: DiscourseResolver, + Resolver: buildResolver('discourse'), @observes('_docTitle', 'hasFocus', 'notifyCount') _titleChanged() { diff --git a/app/assets/javascripts/discourse/components/categories-admin-dropdown.js.es6 b/app/assets/javascripts/discourse/components/categories-admin-dropdown.js.es6 index b2fea03ff..8dbb4d342 100644 --- a/app/assets/javascripts/discourse/components/categories-admin-dropdown.js.es6 +++ b/app/assets/javascripts/discourse/components/categories-admin-dropdown.js.es6 @@ -1,4 +1,4 @@ -import { iconHTML } from 'discourse/helpers/fa-icon'; +import { iconHTML } from 'discourse-common/helpers/fa-icon'; import DropdownButton from 'discourse/components/dropdown-button'; import computed from "ember-addons/ember-computed-decorators"; diff --git a/app/assets/javascripts/discourse/components/d-button.js.es6 b/app/assets/javascripts/discourse/components/d-button.js.es6 index 7737a995b..66e393ba7 100644 --- a/app/assets/javascripts/discourse/components/d-button.js.es6 +++ b/app/assets/javascripts/discourse/components/d-button.js.es6 @@ -1,4 +1,4 @@ -import { iconHTML } from 'discourse/helpers/fa-icon'; +import { iconHTML } from 'discourse-common/helpers/fa-icon'; import { default as computed, observes } from 'ember-addons/ember-computed-decorators'; export default Ember.Component.extend({ diff --git a/app/assets/javascripts/discourse/components/d-link.js.es6 b/app/assets/javascripts/discourse/components/d-link.js.es6 index 54b1486a0..1c94bdc82 100644 --- a/app/assets/javascripts/discourse/components/d-link.js.es6 +++ b/app/assets/javascripts/discourse/components/d-link.js.es6 @@ -1,5 +1,5 @@ import computed from 'ember-addons/ember-computed-decorators'; -import { iconHTML } from 'discourse/helpers/fa-icon'; +import { iconHTML } from 'discourse-common/helpers/fa-icon'; import interceptClick from 'discourse/lib/intercept-click'; export default Ember.Component.extend({ diff --git a/app/assets/javascripts/discourse/components/directory-toggle.js.es6 b/app/assets/javascripts/discourse/components/directory-toggle.js.es6 index f0e0192e1..168db163c 100644 --- a/app/assets/javascripts/discourse/components/directory-toggle.js.es6 +++ b/app/assets/javascripts/discourse/components/directory-toggle.js.es6 @@ -1,5 +1,5 @@ import StringBuffer from 'discourse/mixins/string-buffer'; -import { iconHTML } from 'discourse/helpers/fa-icon'; +import { iconHTML } from 'discourse-common/helpers/fa-icon'; export default Ember.Component.extend(StringBuffer, { tagName: 'th', diff --git a/app/assets/javascripts/discourse/components/global-notice.js.es6 b/app/assets/javascripts/discourse/components/global-notice.js.es6 index 13994f28f..0e76a27e3 100644 --- a/app/assets/javascripts/discourse/components/global-notice.js.es6 +++ b/app/assets/javascripts/discourse/components/global-notice.js.es6 @@ -1,6 +1,6 @@ import { on } from 'ember-addons/ember-computed-decorators'; import StringBuffer from 'discourse/mixins/string-buffer'; -import { iconHTML } from 'discourse/helpers/fa-icon'; +import { iconHTML } from 'discourse-common/helpers/fa-icon'; import LogsNotice from 'discourse/services/logs-notice'; export default Ember.Component.extend(StringBuffer, { diff --git a/app/assets/javascripts/discourse/components/input-tip.js.es6 b/app/assets/javascripts/discourse/components/input-tip.js.es6 index 2ba1c074c..cb1bad446 100644 --- a/app/assets/javascripts/discourse/components/input-tip.js.es6 +++ b/app/assets/javascripts/discourse/components/input-tip.js.es6 @@ -1,5 +1,5 @@ import StringBuffer from 'discourse/mixins/string-buffer'; -import { iconHTML } from 'discourse/helpers/fa-icon'; +import { iconHTML } from 'discourse-common/helpers/fa-icon'; export default Ember.Component.extend(StringBuffer, { classNameBindings: [':tip', 'good', 'bad'], diff --git a/app/assets/javascripts/discourse/components/notifications-button.js.es6 b/app/assets/javascripts/discourse/components/notifications-button.js.es6 index 8a3ffda21..2695cfc91 100644 --- a/app/assets/javascripts/discourse/components/notifications-button.js.es6 +++ b/app/assets/javascripts/discourse/components/notifications-button.js.es6 @@ -1,6 +1,6 @@ import DropdownButton from 'discourse/components/dropdown-button'; import { allLevels, buttonDetails } from 'discourse/lib/notification-levels'; -import { iconHTML } from 'discourse/helpers/fa-icon'; +import { iconHTML } from 'discourse-common/helpers/fa-icon'; import computed from 'ember-addons/ember-computed-decorators'; export default DropdownButton.extend({ diff --git a/app/assets/javascripts/discourse/components/popup-input-tip.js.es6 b/app/assets/javascripts/discourse/components/popup-input-tip.js.es6 index c63997674..2c164ddf5 100644 --- a/app/assets/javascripts/discourse/components/popup-input-tip.js.es6 +++ b/app/assets/javascripts/discourse/components/popup-input-tip.js.es6 @@ -1,5 +1,5 @@ import StringBuffer from 'discourse/mixins/string-buffer'; -import { iconHTML } from 'discourse/helpers/fa-icon'; +import { iconHTML } from 'discourse-common/helpers/fa-icon'; import { default as computed, observes } from 'ember-addons/ember-computed-decorators'; export default Ember.Component.extend(StringBuffer, { diff --git a/app/assets/javascripts/discourse/components/tags-admin-dropdown.js.es6 b/app/assets/javascripts/discourse/components/tags-admin-dropdown.js.es6 index c90efb35f..6d1c7ae7b 100644 --- a/app/assets/javascripts/discourse/components/tags-admin-dropdown.js.es6 +++ b/app/assets/javascripts/discourse/components/tags-admin-dropdown.js.es6 @@ -1,4 +1,4 @@ -import { iconHTML } from 'discourse/helpers/fa-icon'; +import { iconHTML } from 'discourse-common/helpers/fa-icon'; import DropdownButton from 'discourse/components/dropdown-button'; import computed from "ember-addons/ember-computed-decorators"; diff --git a/app/assets/javascripts/discourse/components/topic-footer-mobile-dropdown.js.es6 b/app/assets/javascripts/discourse/components/topic-footer-mobile-dropdown.js.es6 index bd7ce01b1..a9ea76d56 100644 --- a/app/assets/javascripts/discourse/components/topic-footer-mobile-dropdown.js.es6 +++ b/app/assets/javascripts/discourse/components/topic-footer-mobile-dropdown.js.es6 @@ -1,4 +1,4 @@ -import { iconHTML } from 'discourse/helpers/fa-icon'; +import { iconHTML } from 'discourse-common/helpers/fa-icon'; import Combobox from 'discourse/components/combo-box'; import { on, observes } from 'ember-addons/ember-computed-decorators'; diff --git a/app/assets/javascripts/discourse/components/topic-status.js.es6 b/app/assets/javascripts/discourse/components/topic-status.js.es6 index e8fc527cc..2fa076736 100644 --- a/app/assets/javascripts/discourse/components/topic-status.js.es6 +++ b/app/assets/javascripts/discourse/components/topic-status.js.es6 @@ -1,4 +1,4 @@ -import { iconHTML } from 'discourse/helpers/fa-icon'; +import { iconHTML } from 'discourse-common/helpers/fa-icon'; import StringBuffer from 'discourse/mixins/string-buffer'; import { escapeExpression } from 'discourse/lib/utilities'; diff --git a/app/assets/javascripts/discourse/ember/resolver.js.es6 b/app/assets/javascripts/discourse/ember/resolver.js.es6 deleted file mode 100644 index 7e59a326b..000000000 --- a/app/assets/javascripts/discourse/ember/resolver.js.es6 +++ /dev/null @@ -1,206 +0,0 @@ -/* global requirejs, require */ - -var classify = Ember.String.classify; -var get = Ember.get; - -var LOADING_WHITELIST = ['badges', 'userActivity', 'userPrivateMessages', 'admin', 'adminFlags', - 'user', 'preferences', 'adminEmail', 'adminUsersList']; -var _dummyRoute; -var _loadingView; - -function loadingResolver(cb) { - return function(parsedName) { - var fullNameWithoutType = parsedName.fullNameWithoutType; - - if (fullNameWithoutType.indexOf('Loading') >= 0) { - fullNameWithoutType = fullNameWithoutType.replace('Loading', ''); - if (LOADING_WHITELIST.indexOf(fullNameWithoutType) !== -1) { - return cb(fullNameWithoutType); - } - } - }; -} - -function parseName(fullName) { - const nameParts = fullName.split(":"), - type = nameParts[0], fullNameWithoutType = nameParts[1], - name = fullNameWithoutType, - namespace = get(this, 'namespace'), - root = namespace; - - return { - fullName: fullName, - type: type, - fullNameWithoutType: fullNameWithoutType, - name: name, - root: root, - resolveMethodName: "resolve" + classify(type) - }; -} - -export default Ember.DefaultResolver.extend({ - parseName: parseName, - - normalize(fullName) { - var split = fullName.split(':'); - if (split.length > 1) { - var discourseBase = 'discourse/' + split[0] + 's/'; - var adminBase = 'admin/' + split[0] + 's/'; - - // Allow render 'admin/templates/xyz' too - split[1] = split[1].replace('.templates', '').replace('/templates', ''); - - // Try slashes - var dashed = Ember.String.dasherize(split[1].replace(/\./g, '/')); - if (requirejs.entries[discourseBase + dashed] || requirejs.entries[adminBase + dashed]) { - return split[0] + ":" + dashed; - } - - // Try with dashes instead of slashes - dashed = Ember.String.dasherize(split[1].replace(/\./g, '-')); - if (requirejs.entries[discourseBase + dashed] || requirejs.entries[adminBase + dashed]) { - return split[0] + ":" + dashed; - } - } - return this._super(fullName); - }, - - customResolve(parsedName) { - // If we end with the name we want, use it. This allows us to define components within plugins. - const suffix = parsedName.type + 's/' + parsedName.fullNameWithoutType, - dashed = Ember.String.dasherize(suffix), - moduleName = Object.keys(requirejs.entries).find(function(e) { - return (e.indexOf(suffix, e.length - suffix.length) !== -1) || - (e.indexOf(dashed, e.length - dashed.length) !== -1); - }); - - var module; - if (moduleName) { - module = require(moduleName, null, null, true /* force sync */); - if (module && module['default']) { module = module['default']; } - } - return module; - }, - - resolveWidget(parsedName) { - return this.customResolve(parsedName) || this._super(parsedName); - }, - - resolveAdapter(parsedName) { - return this.customResolve(parsedName) || this._super(parsedName); - }, - - resolveModel(parsedName) { - return this.customResolve(parsedName) || this._super(parsedName); - }, - - resolveView(parsedName) { - return this.findLoadingView(parsedName) || this.customResolve(parsedName) || this._super(parsedName); - }, - - resolveHelper(parsedName) { - return this.customResolve(parsedName) || this._super(parsedName); - }, - - resolveController(parsedName) { - return this.customResolve(parsedName) || this._super(parsedName); - }, - - resolveComponent(parsedName) { - return this.customResolve(parsedName) || this._super(parsedName); - }, - - resolveRoute(parsedName) { - return this.findLoadingRoute(parsedName) || this.customResolve(parsedName) || this._super(parsedName); - }, - - resolveTemplate(parsedName) { - return this.findPluginMobileTemplate(parsedName) || - this.findPluginTemplate(parsedName) || - this.findMobileTemplate(parsedName) || - this.findTemplate(parsedName) || - Ember.TEMPLATES.not_found; - }, - - findLoadingRoute: loadingResolver(function() { - _dummyRoute = _dummyRoute || Ember.Route.extend(); - return _dummyRoute; - }), - - findLoadingView: loadingResolver(function() { - if (!_loadingView) { - _loadingView = require('discourse/views/loading', null, null, true /* force sync */); - if (_loadingView && _loadingView['default']) { _loadingView = _loadingView['default']; } - } - return _loadingView; - }), - - findPluginTemplate(parsedName) { - var pluginParsedName = this.parseName(parsedName.fullName.replace("template:", "template:javascripts/")); - return this.findTemplate(pluginParsedName); - }, - - findPluginMobileTemplate(parsedName) { - if (this.mobileView) { - var pluginParsedName = this.parseName(parsedName.fullName.replace("template:", "template:javascripts/mobile/")); - return this.findTemplate(pluginParsedName); - } - }, - - findMobileTemplate(parsedName) { - if (this.mobileView) { - var mobileParsedName = this.parseName(parsedName.fullName.replace("template:", "template:mobile/")); - return this.findTemplate(mobileParsedName); - } - }, - - findTemplate(parsedName) { - const withoutType = parsedName.fullNameWithoutType, - slashedType = withoutType.replace(/\./g, '/'), - decamelized = withoutType.decamelize(), - dashed = decamelized.replace(/\./g, '-').replace(/\_/g, '-'), - templates = Ember.TEMPLATES; - - return this._super(parsedName) || - templates[slashedType] || - templates[withoutType] || - templates[dashed] || - templates[decamelized.replace(/\./, '/')] || - templates[decamelized.replace(/\_/, '/')] || - this.findAdminTemplate(parsedName) || - this.findUnderscoredTemplate(parsedName); - }, - - findUnderscoredTemplate(parsedName) { - var decamelized = parsedName.fullNameWithoutType.decamelize(); - var underscored = decamelized.replace(/\-/g, "_"); - return Ember.TEMPLATES[underscored]; - }, - - // Try to find a template within a special admin namespace, e.g. adminEmail => admin/templates/email - // (similar to how discourse lays out templates) - findAdminTemplate(parsedName) { - var decamelized = parsedName.fullNameWithoutType.decamelize(); - - if (decamelized.indexOf('components') === 0) { - const compTemplate = Ember.TEMPLATES['admin/templates/' + decamelized]; - if (compTemplate) { return compTemplate; } - } - - if (decamelized === "javascripts/admin") { - return Ember.TEMPLATES['admin/templates/admin']; - } - - if (decamelized.indexOf('admin') === 0 || decamelized.indexOf('javascripts/admin') === 0) { - decamelized = decamelized.replace(/^admin\_/, 'admin/templates/'); - decamelized = decamelized.replace(/^admin\./, 'admin/templates/'); - decamelized = decamelized.replace(/\./g, '_'); - - const dashed = decamelized.replace(/_/g, '-'); - return Ember.TEMPLATES[decamelized] || - Ember.TEMPLATES[dashed] || - Ember.TEMPLATES[dashed.replace('admin-', 'admin/')]; - } - } - -}); diff --git a/app/assets/javascripts/discourse/helpers/application.js.es6 b/app/assets/javascripts/discourse/helpers/application.js.es6 index 2bedeb4b0..05306c0e6 100644 --- a/app/assets/javascripts/discourse/helpers/application.js.es6 +++ b/app/assets/javascripts/discourse/helpers/application.js.es6 @@ -1,4 +1,4 @@ -import { registerUnbound } from 'discourse/lib/helpers'; +import { registerUnbound } from 'discourse-common/lib/helpers'; import { longDate, autoUpdatingRelativeAge, number } from 'discourse/lib/formatter'; const safe = Handlebars.SafeString; diff --git a/app/assets/javascripts/discourse/helpers/border-color.js.es6 b/app/assets/javascripts/discourse/helpers/border-color.js.es6 index 7d6d22867..4c327a819 100644 --- a/app/assets/javascripts/discourse/helpers/border-color.js.es6 +++ b/app/assets/javascripts/discourse/helpers/border-color.js.es6 @@ -1,3 +1,3 @@ -import { htmlHelper } from 'discourse/lib/helpers'; +import { htmlHelper } from 'discourse-common/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 index 31f5611c7..5682cd2fb 100644 --- a/app/assets/javascripts/discourse/helpers/bound-avatar-template.js.es6 +++ b/app/assets/javascripts/discourse/helpers/bound-avatar-template.js.es6 @@ -1,4 +1,4 @@ -import { htmlHelper } from 'discourse/lib/helpers'; +import { htmlHelper } from 'discourse-common/lib/helpers'; import { avatarImg } from 'discourse/lib/utilities'; export default htmlHelper((avatarTemplate, size) => 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 index 79639c8a1..2833f8cef 100644 --- a/app/assets/javascripts/discourse/helpers/bound-avatar.js.es6 +++ b/app/assets/javascripts/discourse/helpers/bound-avatar.js.es6 @@ -1,4 +1,4 @@ -import { htmlHelper } from 'discourse/lib/helpers'; +import { htmlHelper } from 'discourse-common/lib/helpers'; import { avatarImg } from 'discourse/lib/utilities'; export default htmlHelper((user, size) => { diff --git a/app/assets/javascripts/discourse/helpers/bound-category-link.js.es6 b/app/assets/javascripts/discourse/helpers/bound-category-link.js.es6 index 5d215405b..a08d97d88 100644 --- a/app/assets/javascripts/discourse/helpers/bound-category-link.js.es6 +++ b/app/assets/javascripts/discourse/helpers/bound-category-link.js.es6 @@ -1,4 +1,4 @@ -import { htmlHelper } from 'discourse/lib/helpers'; +import { htmlHelper } from 'discourse-common/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 b4f75cffc..beab3e173 100644 --- a/app/assets/javascripts/discourse/helpers/bound-date.js.es6 +++ b/app/assets/javascripts/discourse/helpers/bound-date.js.es6 @@ -1,4 +1,4 @@ import { autoUpdatingRelativeAge } from 'discourse/lib/formatter'; -import { htmlHelper } from 'discourse/lib/helpers'; +import { htmlHelper } from 'discourse-common/lib/helpers'; export default htmlHelper(dt => autoUpdatingRelativeAge(new Date(dt), {format: 'medium', title: true })); diff --git a/app/assets/javascripts/discourse/helpers/capitalize-string.js.es6 b/app/assets/javascripts/discourse/helpers/capitalize-string.js.es6 index 3914e405b..976a9ecd3 100644 --- a/app/assets/javascripts/discourse/helpers/capitalize-string.js.es6 +++ b/app/assets/javascripts/discourse/helpers/capitalize-string.js.es6 @@ -1,3 +1,3 @@ -import { htmlHelper } from 'discourse/lib/helpers'; +import { htmlHelper } from 'discourse-common/lib/helpers'; export default htmlHelper(str => 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 c716537a6..74d28b745 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/lib/helpers'; +import { registerUnbound } from 'discourse-common/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 bc1841574..618eca321 100644 --- a/app/assets/javascripts/discourse/helpers/category-link.js.es6 +++ b/app/assets/javascripts/discourse/helpers/category-link.js.es6 @@ -1,5 +1,5 @@ -import { registerUnbound } from 'discourse/lib/helpers'; -import { iconHTML } from 'discourse/helpers/fa-icon'; +import { registerUnbound } from 'discourse-common/lib/helpers'; +import { iconHTML } from 'discourse-common/helpers/fa-icon'; var get = Em.get, escapeExpression = Handlebars.Utils.escapeExpression; 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 54c23bfb6..5042a1112 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/lib/helpers'; +import { registerUnbound } from 'discourse-common/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 ba214983a..7864f01af 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 { cook } from 'discourse/lib/text'; -import { registerUnbound } from 'discourse/lib/helpers'; +import { registerUnbound } from 'discourse-common/lib/helpers'; registerUnbound('cook-text', cook); diff --git a/app/assets/javascripts/discourse/helpers/custom-html.js.es6 b/app/assets/javascripts/discourse/helpers/custom-html.js.es6 index 8dc3be9c3..d862cb02f 100644 --- a/app/assets/javascripts/discourse/helpers/custom-html.js.es6 +++ b/app/assets/javascripts/discourse/helpers/custom-html.js.es6 @@ -1,4 +1,4 @@ -import { registerHelper } from 'discourse/lib/helpers'; +import { registerHelper } from 'discourse-common/lib/helpers'; import PreloadStore from 'preload-store'; const _customizations = {}; 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 fd694261d..4b1553735 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 @@ -import { htmlHelper } from 'discourse/lib/helpers'; +import { htmlHelper } from 'discourse-common/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 1221da241..8c6cbf156 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/lib/helpers'; +import { registerUnbound } from 'discourse-common/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-node.js.es6 b/app/assets/javascripts/discourse/helpers/fa-icon-node.js.es6 new file mode 100644 index 000000000..84f154202 --- /dev/null +++ b/app/assets/javascripts/discourse/helpers/fa-icon-node.js.es6 @@ -0,0 +1,20 @@ +import { h } from 'virtual-dom'; +import { iconClasses } from 'discourse-common/helpers/fa-icon'; + +export function iconNode(icon, params) { + params = params || {}; + + const properties = { + className: iconClasses(icon, params), + attributes: { "aria-hidden": true } + }; + + if (params.title) { properties.attributes.title = params.title; } + + if (params.label) { + return h('i', properties, h('span.sr-only', I18n.t(params.label))); + } else { + return h('i', properties); + } +} + diff --git a/app/assets/javascripts/discourse/helpers/format-age.js.es6 b/app/assets/javascripts/discourse/helpers/format-age.js.es6 index 69247fb5f..75119d0c5 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/lib/helpers'; +import { registerUnbound } from 'discourse-common/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 feb207c2a..84602bebc 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/lib/helpers'; +import { registerUnbound } from 'discourse-common/lib/helpers'; import { autoUpdatingRelativeAge } from 'discourse/lib/formatter'; /** 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 5f4c6cbce..f673bb8cd 100644 --- a/app/assets/javascripts/discourse/helpers/icon-or-image.js.es6 +++ b/app/assets/javascripts/discourse/helpers/icon-or-image.js.es6 @@ -1,4 +1,4 @@ -import { htmlHelper } from 'discourse/lib/helpers'; +import { htmlHelper } from 'discourse-common/lib/helpers'; export default htmlHelper(function(str) { if (Ember.isEmpty(str)) { return ""; } diff --git a/app/assets/javascripts/discourse/helpers/loading-spinner.es6 b/app/assets/javascripts/discourse/helpers/loading-spinner.es6 index 05dfd735b..fda8fe6be 100644 --- a/app/assets/javascripts/discourse/helpers/loading-spinner.es6 +++ b/app/assets/javascripts/discourse/helpers/loading-spinner.es6 @@ -1,4 +1,4 @@ -import { htmlHelper } from 'discourse/lib/helpers'; +import { htmlHelper } from 'discourse-common/lib/helpers'; function renderSpinner(cssClass) { var html = "
I18n.t(key, params)); registerUnbound('replace-emoji', text => new Handlebars.SafeString(emojiUnescape(text))); diff --git a/app/assets/javascripts/discourse/helpers/shorten-url.js.es6 b/app/assets/javascripts/discourse/helpers/shorten-url.js.es6 index 4862b04d7..61afd3f5f 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/lib/helpers'; +import { registerUnbound } from 'discourse-common/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 ca03e990d..2c1d61606 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/lib/helpers'; +import { registerUnbound } from 'discourse-common/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 228b90e58..476ff9850 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/lib/helpers'; +import { registerUnbound } from 'discourse-common/lib/helpers'; import { avatarImg } from 'discourse/lib/utilities'; function renderAvatar(user, options) { diff --git a/app/assets/javascripts/discourse/helpers/user-status.js.es6 b/app/assets/javascripts/discourse/helpers/user-status.js.es6 index bc8af5f15..cffd9e7ac 100644 --- a/app/assets/javascripts/discourse/helpers/user-status.js.es6 +++ b/app/assets/javascripts/discourse/helpers/user-status.js.es6 @@ -1,5 +1,5 @@ -import { iconHTML } from 'discourse/helpers/fa-icon'; -import { htmlHelper } from 'discourse/lib/helpers'; +import { iconHTML } from 'discourse-common/helpers/fa-icon'; +import { htmlHelper } from 'discourse-common/lib/helpers'; import { escapeExpression } from 'discourse/lib/utilities'; export default htmlHelper((user, args) => { diff --git a/app/assets/javascripts/discourse/lib/plugin-api.js.es6 b/app/assets/javascripts/discourse/lib/plugin-api.js.es6 index 9aedcec64..98dacb581 100644 --- a/app/assets/javascripts/discourse/lib/plugin-api.js.es6 +++ b/app/assets/javascripts/discourse/lib/plugin-api.js.es6 @@ -1,4 +1,4 @@ -import { iconNode } from 'discourse/helpers/fa-icon'; +import { iconNode } from 'discourse/helpers/fa-icon-node'; import { addDecorator } from 'discourse/widgets/post-cooked'; import ComposerEditor from 'discourse/components/composer-editor'; import { addButton } from 'discourse/widgets/post-menu'; diff --git a/app/assets/javascripts/discourse/router.js.es6 b/app/assets/javascripts/discourse/mapping-router.js.es6 similarity index 100% rename from app/assets/javascripts/discourse/router.js.es6 rename to app/assets/javascripts/discourse/mapping-router.js.es6 diff --git a/app/assets/javascripts/discourse/pre-initializers/map-routes.js.es6 b/app/assets/javascripts/discourse/pre-initializers/map-routes.js.es6 index e34920144..94629c17b 100644 --- a/app/assets/javascripts/discourse/pre-initializers/map-routes.js.es6 +++ b/app/assets/javascripts/discourse/pre-initializers/map-routes.js.es6 @@ -1,4 +1,4 @@ -import { mapRoutes } from 'discourse/router'; +import { mapRoutes } from 'discourse/mapping-router'; export default { name: "map-routes", diff --git a/app/assets/javascripts/discourse/views/bookmark-button.js.es6 b/app/assets/javascripts/discourse/views/bookmark-button.js.es6 index 6135feae8..200874b6b 100644 --- a/app/assets/javascripts/discourse/views/bookmark-button.js.es6 +++ b/app/assets/javascripts/discourse/views/bookmark-button.js.es6 @@ -1,5 +1,5 @@ import ButtonView from 'discourse/views/button'; -import { iconHTML } from 'discourse/helpers/fa-icon'; +import { iconHTML } from 'discourse-common/helpers/fa-icon'; export default ButtonView.extend({ classNames: ['bookmark'], diff --git a/app/assets/javascripts/discourse/views/flag-topic-button.js.es6 b/app/assets/javascripts/discourse/views/flag-topic-button.js.es6 index ec3296ac0..da32165cb 100644 --- a/app/assets/javascripts/discourse/views/flag-topic-button.js.es6 +++ b/app/assets/javascripts/discourse/views/flag-topic-button.js.es6 @@ -1,5 +1,5 @@ import ButtonView from 'discourse/views/button'; -import { iconHTML } from 'discourse/helpers/fa-icon'; +import { iconHTML } from 'discourse-common/helpers/fa-icon'; export default ButtonView.extend({ classNames: ['flag-topic'], diff --git a/app/assets/javascripts/discourse/views/invite-reply-button.js.es6 b/app/assets/javascripts/discourse/views/invite-reply-button.js.es6 index 7651c60cb..ba450494f 100644 --- a/app/assets/javascripts/discourse/views/invite-reply-button.js.es6 +++ b/app/assets/javascripts/discourse/views/invite-reply-button.js.es6 @@ -1,5 +1,5 @@ import ButtonView from 'discourse/views/button'; -import { iconHTML } from 'discourse/helpers/fa-icon'; +import { iconHTML } from 'discourse-common/helpers/fa-icon'; export default ButtonView.extend({ classNames: ['invite-topic'], diff --git a/app/assets/javascripts/discourse/views/share-button.js.es6 b/app/assets/javascripts/discourse/views/share-button.js.es6 index a7920b4af..cac213427 100644 --- a/app/assets/javascripts/discourse/views/share-button.js.es6 +++ b/app/assets/javascripts/discourse/views/share-button.js.es6 @@ -1,5 +1,5 @@ import ButtonView from 'discourse/views/button'; -import { iconHTML } from 'discourse/helpers/fa-icon'; +import { iconHTML } from 'discourse-common/helpers/fa-icon'; export default ButtonView.extend({ classNames: ['share'], diff --git a/app/assets/javascripts/discourse/widgets/actions-summary.js.es6 b/app/assets/javascripts/discourse/widgets/actions-summary.js.es6 index 55fb1043c..e925ea954 100644 --- a/app/assets/javascripts/discourse/widgets/actions-summary.js.es6 +++ b/app/assets/javascripts/discourse/widgets/actions-summary.js.es6 @@ -1,6 +1,6 @@ import { createWidget } from 'discourse/widgets/widget'; import { avatarFor } from 'discourse/widgets/post'; -import { iconNode } from 'discourse/helpers/fa-icon'; +import { iconNode } from 'discourse/helpers/fa-icon-node'; import { h } from 'virtual-dom'; import { dateNode } from 'discourse/helpers/node'; diff --git a/app/assets/javascripts/discourse/widgets/button.js.es6 b/app/assets/javascripts/discourse/widgets/button.js.es6 index 96b370870..f3893f1f6 100644 --- a/app/assets/javascripts/discourse/widgets/button.js.es6 +++ b/app/assets/javascripts/discourse/widgets/button.js.es6 @@ -1,5 +1,5 @@ import { createWidget } from 'discourse/widgets/widget'; -import { iconNode } from 'discourse/helpers/fa-icon'; +import { iconNode } from 'discourse/helpers/fa-icon-node'; export default createWidget('button', { tagName: 'button.widget-button', diff --git a/app/assets/javascripts/discourse/widgets/embedded-post.js.es6 b/app/assets/javascripts/discourse/widgets/embedded-post.js.es6 index 8c1ed5477..6f572388a 100644 --- a/app/assets/javascripts/discourse/widgets/embedded-post.js.es6 +++ b/app/assets/javascripts/discourse/widgets/embedded-post.js.es6 @@ -2,7 +2,7 @@ import PostCooked from 'discourse/widgets/post-cooked'; import DecoratorHelper from 'discourse/widgets/decorator-helper'; import { createWidget } from 'discourse/widgets/widget'; import { h } from 'virtual-dom'; -import { iconNode } from 'discourse/helpers/fa-icon'; +import { iconNode } from 'discourse/helpers/fa-icon-node'; import DiscourseURL from 'discourse/lib/url'; createWidget('post-link-arrow', { diff --git a/app/assets/javascripts/discourse/widgets/header-topic-info.js.es6 b/app/assets/javascripts/discourse/widgets/header-topic-info.js.es6 index 3215bc8f7..8704830bb 100644 --- a/app/assets/javascripts/discourse/widgets/header-topic-info.js.es6 +++ b/app/assets/javascripts/discourse/widgets/header-topic-info.js.es6 @@ -1,6 +1,6 @@ import { createWidget } from 'discourse/widgets/widget'; import { h } from 'virtual-dom'; -import { iconNode } from 'discourse/helpers/fa-icon'; +import { iconNode } from 'discourse/helpers/fa-icon-node'; import DiscourseURL from 'discourse/lib/url'; import RawHtml from 'discourse/widgets/raw-html'; import { tagNode } from 'discourse/lib/render-tag'; diff --git a/app/assets/javascripts/discourse/widgets/header.js.es6 b/app/assets/javascripts/discourse/widgets/header.js.es6 index 298c6687e..c7c42e5c7 100644 --- a/app/assets/javascripts/discourse/widgets/header.js.es6 +++ b/app/assets/javascripts/discourse/widgets/header.js.es6 @@ -1,5 +1,5 @@ import { createWidget } from 'discourse/widgets/widget'; -import { iconNode } from 'discourse/helpers/fa-icon'; +import { iconNode } from 'discourse/helpers/fa-icon-node'; import { avatarImg } from 'discourse/widgets/post'; import DiscourseURL from 'discourse/lib/url'; import { wantsNewWindow } from 'discourse/lib/intercept-click'; diff --git a/app/assets/javascripts/discourse/widgets/home-logo.js.es6 b/app/assets/javascripts/discourse/widgets/home-logo.js.es6 index 4684901ae..a609944b5 100644 --- a/app/assets/javascripts/discourse/widgets/home-logo.js.es6 +++ b/app/assets/javascripts/discourse/widgets/home-logo.js.es6 @@ -1,6 +1,6 @@ import { createWidget } from 'discourse/widgets/widget'; import { h } from 'virtual-dom'; -import { iconNode } from 'discourse/helpers/fa-icon'; +import { iconNode } from 'discourse/helpers/fa-icon-node'; import { wantsNewWindow } from 'discourse/lib/intercept-click'; import DiscourseURL from 'discourse/lib/url'; diff --git a/app/assets/javascripts/discourse/widgets/link.js.es6 b/app/assets/javascripts/discourse/widgets/link.js.es6 index 51ed2a769..7eabce397 100644 --- a/app/assets/javascripts/discourse/widgets/link.js.es6 +++ b/app/assets/javascripts/discourse/widgets/link.js.es6 @@ -1,6 +1,6 @@ import { wantsNewWindow } from 'discourse/lib/intercept-click'; import { createWidget } from 'discourse/widgets/widget'; -import { iconNode } from 'discourse/helpers/fa-icon'; +import { iconNode } from 'discourse/helpers/fa-icon-node'; import { h } from 'virtual-dom'; import DiscourseURL from 'discourse/lib/url'; diff --git a/app/assets/javascripts/discourse/widgets/post-admin-menu.js.es6 b/app/assets/javascripts/discourse/widgets/post-admin-menu.js.es6 index 17332ba65..eb868b034 100644 --- a/app/assets/javascripts/discourse/widgets/post-admin-menu.js.es6 +++ b/app/assets/javascripts/discourse/widgets/post-admin-menu.js.es6 @@ -1,4 +1,4 @@ -import { iconNode } from 'discourse/helpers/fa-icon'; +import { iconNode } from 'discourse/helpers/fa-icon-node'; import { createWidget } from 'discourse/widgets/widget'; import { h } from 'virtual-dom'; diff --git a/app/assets/javascripts/discourse/widgets/post-edits-indicator.js.es6 b/app/assets/javascripts/discourse/widgets/post-edits-indicator.js.es6 index 5ae62a3f1..9eac352d6 100644 --- a/app/assets/javascripts/discourse/widgets/post-edits-indicator.js.es6 +++ b/app/assets/javascripts/discourse/widgets/post-edits-indicator.js.es6 @@ -1,5 +1,5 @@ import { createWidget } from 'discourse/widgets/widget'; -import { iconNode } from 'discourse/helpers/fa-icon'; +import { iconNode } from 'discourse/helpers/fa-icon-node'; import { longDate } from 'discourse/lib/formatter'; import { h } from 'virtual-dom'; diff --git a/app/assets/javascripts/discourse/widgets/post-links.js.es6 b/app/assets/javascripts/discourse/widgets/post-links.js.es6 index 3d5b8f871..918219145 100644 --- a/app/assets/javascripts/discourse/widgets/post-links.js.es6 +++ b/app/assets/javascripts/discourse/widgets/post-links.js.es6 @@ -1,4 +1,4 @@ -import { iconNode } from 'discourse/helpers/fa-icon'; +import { iconNode } from 'discourse/helpers/fa-icon-node'; import { createWidget } from 'discourse/widgets/widget'; import { h } from 'virtual-dom'; import { replaceEmoji } from 'discourse/widgets/emoji'; diff --git a/app/assets/javascripts/discourse/widgets/post-small-action.js.es6 b/app/assets/javascripts/discourse/widgets/post-small-action.js.es6 index 882cbc974..4160712ab 100644 --- a/app/assets/javascripts/discourse/widgets/post-small-action.js.es6 +++ b/app/assets/javascripts/discourse/widgets/post-small-action.js.es6 @@ -1,6 +1,6 @@ import { createWidget } from 'discourse/widgets/widget'; import RawHtml from 'discourse/widgets/raw-html'; -import { iconNode } from 'discourse/helpers/fa-icon'; +import { iconNode } from 'discourse/helpers/fa-icon-node'; import { h } from 'virtual-dom'; import { actionDescriptionHtml } from 'discourse/components/small-action'; import { avatarFor } from 'discourse/widgets/post'; diff --git a/app/assets/javascripts/discourse/widgets/post.js.es6 b/app/assets/javascripts/discourse/widgets/post.js.es6 index 8ebe96aa2..f6f50d03f 100644 --- a/app/assets/javascripts/discourse/widgets/post.js.es6 +++ b/app/assets/javascripts/discourse/widgets/post.js.es6 @@ -1,7 +1,7 @@ import PostCooked from 'discourse/widgets/post-cooked'; import DecoratorHelper from 'discourse/widgets/decorator-helper'; import { createWidget, applyDecorators } from 'discourse/widgets/widget'; -import { iconNode } from 'discourse/helpers/fa-icon'; +import { iconNode } from 'discourse/helpers/fa-icon-node'; import { transformBasicPost } from 'discourse/lib/transform-post'; import { h } from 'virtual-dom'; import DiscourseURL from 'discourse/lib/url'; diff --git a/app/assets/javascripts/discourse/widgets/poster-name.js.es6 b/app/assets/javascripts/discourse/widgets/poster-name.js.es6 index 4590da342..f61435725 100644 --- a/app/assets/javascripts/discourse/widgets/poster-name.js.es6 +++ b/app/assets/javascripts/discourse/widgets/poster-name.js.es6 @@ -1,4 +1,4 @@ -import { iconNode } from 'discourse/helpers/fa-icon'; +import { iconNode } from 'discourse/helpers/fa-icon-node'; import { createWidget } from 'discourse/widgets/widget'; import { h } from 'virtual-dom'; diff --git a/app/assets/javascripts/discourse/widgets/private-message-map.js.es6 b/app/assets/javascripts/discourse/widgets/private-message-map.js.es6 index 7d311b70b..1c4315379 100644 --- a/app/assets/javascripts/discourse/widgets/private-message-map.js.es6 +++ b/app/assets/javascripts/discourse/widgets/private-message-map.js.es6 @@ -1,4 +1,4 @@ -import { iconNode } from 'discourse/helpers/fa-icon'; +import { iconNode } from 'discourse/helpers/fa-icon-node'; import { createWidget } from 'discourse/widgets/widget'; import { h } from 'virtual-dom'; import { avatarFor } from 'discourse/widgets/post'; diff --git a/app/assets/javascripts/discourse/widgets/search-menu-results.js.es6 b/app/assets/javascripts/discourse/widgets/search-menu-results.js.es6 index 4db6f5af3..2eddf7f87 100644 --- a/app/assets/javascripts/discourse/widgets/search-menu-results.js.es6 +++ b/app/assets/javascripts/discourse/widgets/search-menu-results.js.es6 @@ -3,7 +3,7 @@ import { dateNode } from 'discourse/helpers/node'; import RawHtml from 'discourse/widgets/raw-html'; import { createWidget } from 'discourse/widgets/widget'; import { h } from 'virtual-dom'; -import { iconNode } from 'discourse/helpers/fa-icon'; +import { iconNode } from 'discourse/helpers/fa-icon-node'; class Highlighted extends RawHtml { constructor(html, term) { diff --git a/app/assets/javascripts/discourse/widgets/time-gap.js.es6 b/app/assets/javascripts/discourse/widgets/time-gap.js.es6 index 5d617772c..f2ce1cfdb 100644 --- a/app/assets/javascripts/discourse/widgets/time-gap.js.es6 +++ b/app/assets/javascripts/discourse/widgets/time-gap.js.es6 @@ -1,6 +1,6 @@ import { createWidget } from 'discourse/widgets/widget'; import { h } from 'virtual-dom'; -import { iconNode } from 'discourse/helpers/fa-icon'; +import { iconNode } from 'discourse/helpers/fa-icon-node'; function description(attrs) { const daysSince = attrs.daysSince; diff --git a/app/assets/javascripts/discourse/widgets/topic-status.js.es6 b/app/assets/javascripts/discourse/widgets/topic-status.js.es6 index bb7994692..d0b8ac5ef 100644 --- a/app/assets/javascripts/discourse/widgets/topic-status.js.es6 +++ b/app/assets/javascripts/discourse/widgets/topic-status.js.es6 @@ -1,5 +1,5 @@ import { createWidget } from 'discourse/widgets/widget'; -import { iconNode } from 'discourse/helpers/fa-icon'; +import { iconNode } from 'discourse/helpers/fa-icon-node'; import { h } from 'virtual-dom'; import { escapeExpression } from 'discourse/lib/utilities'; diff --git a/app/assets/javascripts/discourse/widgets/topic-timeline.js.es6 b/app/assets/javascripts/discourse/widgets/topic-timeline.js.es6 index 06ab9b343..1056fb282 100644 --- a/app/assets/javascripts/discourse/widgets/topic-timeline.js.es6 +++ b/app/assets/javascripts/discourse/widgets/topic-timeline.js.es6 @@ -1,7 +1,7 @@ import { createWidget } from 'discourse/widgets/widget'; import { h } from 'virtual-dom'; import { relativeAge } from 'discourse/lib/formatter'; -import { iconNode } from 'discourse/helpers/fa-icon'; +import { iconNode } from 'discourse/helpers/fa-icon-node'; const SCROLLAREA_HEIGHT = 300; const SCROLLER_HEIGHT = 50; diff --git a/app/assets/javascripts/main_include.js b/app/assets/javascripts/main_include.js index dcd876d9c..81be2e938 100644 --- a/app/assets/javascripts/main_include.js +++ b/app/assets/javascripts/main_include.js @@ -2,6 +2,7 @@ //= require ./ember-addons/decorator-alias //= require ./ember-addons/macro-alias //= require ./ember-addons/ember-computed-decorators +//= require_tree ./discourse-common //= require ./discourse //= require ./deprecated @@ -19,11 +20,6 @@ //= 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/lib/raw-handlebars -//= require ./discourse/lib/helpers //= require ./discourse/lib/computed //= require ./discourse/lib/formatter //= require ./discourse/lib/eyeline @@ -92,7 +88,7 @@ //= require ./discourse/helpers/category-link //= require ./discourse/lib/export-result //= require_tree ./discourse/lib -//= require ./discourse/router +//= require ./discourse/mapping-router //= require_tree ./discourse/controllers //= require_tree ./discourse/models diff --git a/app/assets/javascripts/wizard-application.js b/app/assets/javascripts/wizard-application.js index 5547ae0f3..e69ccaf61 100644 --- a/app/assets/javascripts/wizard-application.js +++ b/app/assets/javascripts/wizard-application.js @@ -2,9 +2,7 @@ //= require ./ember-addons/decorator-alias //= require ./ember-addons/macro-alias //= require ./ember-addons/ember-computed-decorators -//= require discourse/lib/raw-handlebars -//= require discourse/lib/helpers -//= require wizard/resolver +//= require_tree ./discourse-common //= require wizard/router //= require wizard/wizard //= require_tree ./wizard/templates @@ -14,5 +12,4 @@ //= require_tree ./wizard/controllers //= require_tree ./wizard/lib //= require_tree ./wizard/mixins -//= require_tree ./wizard/helpers //= require_tree ./wizard/initializers diff --git a/app/assets/javascripts/wizard/models/wizard.js.es6 b/app/assets/javascripts/wizard/models/wizard.js.es6 index b86956160..6b53f545b 100644 --- a/app/assets/javascripts/wizard/models/wizard.js.es6 +++ b/app/assets/javascripts/wizard/models/wizard.js.es6 @@ -20,4 +20,3 @@ export function findWizard() { return Wizard.create(wizard); }); } - diff --git a/app/assets/javascripts/wizard/resolver.js.es6 b/app/assets/javascripts/wizard/resolver.js.es6 deleted file mode 100644 index 1feeb307a..000000000 --- a/app/assets/javascripts/wizard/resolver.js.es6 +++ /dev/null @@ -1,26 +0,0 @@ -function resolveType(parsedName) { - const entries = requirejs.entries; - - const named = `wizard/${parsedName.type}s/${parsedName.fullNameWithoutType}`; - if (entries[named]) { - const module = require(named, null, null, true /* force sync */); - return module.default; - } -} - -function customResolve(parsedName) { - return resolveType(parsedName) || this._super(parsedName); -} - -export default Ember.DefaultResolver.extend({ - - resolveRoute: customResolve, - resolveController: customResolve, - resolveComponent: customResolve, - - resolveTemplate(parsedName) { - const templates = Ember.TEMPLATES; - const withoutType = parsedName.fullNameWithoutType; - return templates[`wizard/templates/${withoutType}`] || this._super(parsedName); - } -}); diff --git a/app/assets/javascripts/wizard/router.js.es6 b/app/assets/javascripts/wizard/router.js.es6 index d110766f8..31d4aa861 100644 --- a/app/assets/javascripts/wizard/router.js.es6 +++ b/app/assets/javascripts/wizard/router.js.es6 @@ -1,4 +1,6 @@ -const Router = Ember.Router.extend(); +const Router = Ember.Router.extend({ + location: Ember.testing ? 'none': 'hash' +}); Router.map(function () { this.route('step', { path: '/step/:step_id' }); diff --git a/app/assets/javascripts/wizard/templates/components/wizard-step.hbs b/app/assets/javascripts/wizard/templates/components/wizard-step.hbs index f21c80a9a..e174779bb 100644 --- a/app/assets/javascripts/wizard/templates/components/wizard-step.hbs +++ b/app/assets/javascripts/wizard/templates/components/wizard-step.hbs @@ -22,7 +22,7 @@ {{#if showBackButton}} {{/if}} @@ -30,7 +30,7 @@ {{#if showNextButton}} {{/if}} diff --git a/app/assets/javascripts/wizard/test/test_helper.js b/app/assets/javascripts/wizard/test/test_helper.js index 1b2733092..17f51e38b 100644 --- a/app/assets/javascripts/wizard/test/test_helper.js +++ b/app/assets/javascripts/wizard/test/test_helper.js @@ -44,6 +44,7 @@ QUnit.testDone(function() { var wizard = require('wizard/wizard').default.create({ rootElement: '#ember-testing' }); + wizard.setupForTesting(); wizard.injectTestHelpers(); wizard.start(); diff --git a/app/assets/javascripts/wizard/wizard.js.es6 b/app/assets/javascripts/wizard/wizard.js.es6 index a806ebc0c..5881ac473 100644 --- a/app/assets/javascripts/wizard/wizard.js.es6 +++ b/app/assets/javascripts/wizard/wizard.js.es6 @@ -1,10 +1,8 @@ -import Resolver from 'wizard/resolver'; -import Router from 'wizard/router'; +import { buildResolver } from 'discourse-common/resolver'; export default Ember.Application.extend({ rootElement: '#wizard-main', - Resolver, - Router, + Resolver: buildResolver('wizard'), start() { Object.keys(requirejs._eak_seen).forEach(key => { diff --git a/app/models/site_customization.rb b/app/models/site_customization.rb index 19d6f9778..cb043112c 100644 --- a/app/models/site_customization.rb +++ b/app/models/site_customization.rb @@ -47,7 +47,7 @@ PLUGIN_API_JS name = node["name"] || node["data-template-name"] || "broken" precompiled = if name =~ /\.raw$/ - "require('discourse/lib/raw-handlebars').template(#{Barber::Precompiler.compile(node.inner_html)})" + "require('discourse-common/lib/raw-handlebars').template(#{Barber::Precompiler.compile(node.inner_html)})" else "Ember.HTMLBars.template(#{Barber::Ember::Precompiler.compile(node.inner_html)})" end diff --git a/lib/freedom_patches/raw_handlebars.rb b/lib/freedom_patches/raw_handlebars.rb index 28f04e314..ea643aa78 100644 --- a/lib/freedom_patches/raw_handlebars.rb +++ b/lib/freedom_patches/raw_handlebars.rb @@ -9,7 +9,7 @@ class Barber::Precompiler def precompiler if !@precompiler - source = File.read("#{Rails.root}/app/assets/javascripts/discourse/lib/raw-handlebars.js.es6") + source = File.read("#{Rails.root}/app/assets/javascripts/discourse-common/lib/raw-handlebars.js.es6") template = Tilt::ES6ModuleTranspilerTemplate.new {} transpiled = template.babel_transpile(source) @@ -40,11 +40,11 @@ module Discourse module Handlebars module Helper def precompile_handlebars(string) - "require('discourse/lib/raw-handlebars').template(#{Barber::Precompiler.compile(string)});" + "require('discourse-common/lib/raw-handlebars').template(#{Barber::Precompiler.compile(string)});" end def compile_handlebars(string) - "require('discourse/lib/raw-handlebars').compile(#{indent(string).inspect});" + "require('discourse-common/lib/raw-handlebars').compile(#{indent(string).inspect});" end end end diff --git a/plugins/poll/assets/javascripts/components/poll-option.js.es6 b/plugins/poll/assets/javascripts/components/poll-option.js.es6 index b20f2b520..c31e7f5f2 100644 --- a/plugins/poll/assets/javascripts/components/poll-option.js.es6 +++ b/plugins/poll/assets/javascripts/components/poll-option.js.es6 @@ -1,5 +1,5 @@ import computed from 'ember-addons/ember-computed-decorators'; -import { iconHTML } from 'discourse/helpers/fa-icon'; +import { iconHTML } from 'discourse-common/helpers/fa-icon'; export default Em.Component.extend({ tagName: "li", diff --git a/test/javascripts/ember/resolver-test.js.es6 b/test/javascripts/ember/resolver-test.js.es6 index 1e5ad1ea5..1c81f96df 100644 --- a/test/javascripts/ember/resolver-test.js.es6 +++ b/test/javascripts/ember/resolver-test.js.es6 @@ -1,4 +1,4 @@ -import DiscourseResolver from 'discourse/ember/resolver'; +import { buildResolver } from 'discourse-common/resolver'; let originalTemplates; let resolver; @@ -15,6 +15,8 @@ function setTemplates(lookupTemplateStrings) { }); } +const DiscourseResolver = buildResolver('discourse'); + module("lib:resolver", { setup: function() { originalTemplates = Ember.TEMPLATES; diff --git a/test/javascripts/helpers/create-store.js.es6 b/test/javascripts/helpers/create-store.js.es6 index be21a3698..37df69372 100644 --- a/test/javascripts/helpers/create-store.js.es6 +++ b/test/javascripts/helpers/create-store.js.es6 @@ -2,10 +2,10 @@ import Store from "discourse/models/store"; import RestAdapter from 'discourse/adapters/rest'; import KeyValueStore from 'discourse/lib/key-value-store'; import TopicTrackingState from 'discourse/models/topic-tracking-state'; -import Resolver from 'discourse/ember/resolver'; +import { buildResolver } from 'discourse-common/resolver'; export default function() { - const resolver = Resolver.create(); + const resolver = buildResolver('discourse').create(); return Store.create({ container: { lookup(type) { diff --git a/test/javascripts/helpers/init-ember-qunit.js b/test/javascripts/helpers/init-ember-qunit.js index b96c0fe46..32d0184e7 100644 --- a/test/javascripts/helpers/init-ember-qunit.js +++ b/test/javascripts/helpers/init-ember-qunit.js @@ -1,2 +1,2 @@ -var resolver = require('discourse/ember/resolver').default; -window.setResolver(resolver.create({ namespace: Discourse })); +var buildResolver = require('discourse-common/resolver').buildResolver; +window.setResolver(buildResolver('discourse').create({ namespace: Discourse })); diff --git a/test/javascripts/test_helper.js b/test/javascripts/test_helper.js index 2ffb2986c..b0e8b7471 100644 --- a/test/javascripts/test_helper.js +++ b/test/javascripts/test_helper.js @@ -32,7 +32,6 @@ //= require helpers/qunit-helpers //= require helpers/assertions -//= require helpers/init-ember-qunit //= require_tree ./fixtures //= require_tree ./lib //= require_tree .