diff --git a/Gemfile b/Gemfile index 551c79baa..59a10f8b0 100644 --- a/Gemfile +++ b/Gemfile @@ -107,6 +107,7 @@ gem 'ember-rails' gem 'ember-source', '1.9.0.beta.4' gem 'handlebars-source', '2.0.0' gem 'barber' +gem '6to5' gem 'message_bus' gem 'rails_multisite', path: 'vendor/gems/rails_multisite' diff --git a/Gemfile.lock b/Gemfile.lock index 961ded292..e5d8048d2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -6,6 +6,10 @@ PATH GEM remote: https://rubygems.org/ specs: + 6to5 (0.5.0) + 6to5-source (>= 1.14, < 4) + execjs (~> 2.0) + 6to5-source (3.3.7) CFPropertyList (2.2.8) actionmailer (4.1.8) actionpack (= 4.1.8) @@ -456,6 +460,7 @@ PLATFORMS ruby DEPENDENCIES + 6to5 actionpack-action_caching active_model_serializers (~> 0.8.0) annotate diff --git a/app/assets/javascripts/discourse/components/toggle-summary.js.es6 b/app/assets/javascripts/discourse/components/toggle-summary.js.es6 index 440cf8f02..45dad2660 100644 --- a/app/assets/javascripts/discourse/components/toggle-summary.js.es6 +++ b/app/assets/javascripts/discourse/components/toggle-summary.js.es6 @@ -1,11 +1,3 @@ -/** - The controls for toggling the summarized view on/off - - @class ToggleSummaryComponent - @extends Ember.Component - @namespace Discourse - @module Discourse -**/ export default Ember.Component.extend({ layoutName: 'components/toggle-summary', tagName: 'section', @@ -13,7 +5,7 @@ export default Ember.Component.extend({ postStream: Em.computed.alias('topic.postStream'), actions: { - toggleSummary: function() { + toggleSummary() { this.get('postStream').toggleSummary(); } } 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 114163d7c..5fd1a3b86 100644 --- a/app/assets/javascripts/discourse/helpers/cold-age-class.js.es6 +++ b/app/assets/javascripts/discourse/helpers/cold-age-class.js.es6 @@ -1,6 +1,6 @@ import registerUnbound from 'discourse/helpers/register-unbound'; -export function daysSinceEpoch(dt) { +function daysSinceEpoch(dt) { // 1000 * 60 * 60 * 24 = days since epoch return dt.getTime() / 86400000; } @@ -22,3 +22,5 @@ registerUnbound('cold-age-class', function(dt, params) { return className; }); + +export { daysSinceEpoch }; diff --git a/app/assets/javascripts/discourse/helpers/fa-icon.js.es6 b/app/assets/javascripts/discourse/helpers/fa-icon.js.es6 index cce1f3aa8..f91800fb0 100644 --- a/app/assets/javascripts/discourse/helpers/fa-icon.js.es6 +++ b/app/assets/javascripts/discourse/helpers/fa-icon.js.es6 @@ -1,12 +1,12 @@ import registerUnbound from 'discourse/helpers/register-unbound'; -export function iconClasses(icon, modifier) { +function iconClasses(icon, modifier) { var classes = "fa fa-" + icon; if (modifier) { classes += " fa-" + modifier; } return classes; } -export function iconHTML(icon, label, modifier) { +function iconHTML(icon, label, modifier) { var html = "<i class='" + iconClasses(icon, modifier) + "'"; if (label) { html += " aria-hidden='true'"; } html += "></i>"; @@ -20,3 +20,5 @@ export function iconHTML(icon, label, modifier) { registerUnbound('fa-icon', function(icon, params) { return new Handlebars.SafeString(iconHTML(icon, params.label, params.modifier)); }); + +export { iconClasses, iconHTML }; diff --git a/app/assets/javascripts/discourse/helpers/raw.js.es6 b/app/assets/javascripts/discourse/helpers/raw.js.es6 index ea1687ce6..4c4580e33 100644 --- a/app/assets/javascripts/discourse/helpers/raw.js.es6 +++ b/app/assets/javascripts/discourse/helpers/raw.js.es6 @@ -1,6 +1,6 @@ import registerUnbound from 'discourse/helpers/register-unbound'; -export function renderRaw(template, templateName, params) { +function renderRaw(template, templateName, params) { params.parent = params.parent || this; if (!params.view) { @@ -22,3 +22,5 @@ registerUnbound('raw', function(templateName, params) { return renderRaw.call(this, template, templateName, params); }); + +export { renderRaw }; diff --git a/app/assets/javascripts/discourse/helpers/user-avatar.js.es6 b/app/assets/javascripts/discourse/helpers/user-avatar.js.es6 index 614480481..230e97f50 100644 --- a/app/assets/javascripts/discourse/helpers/user-avatar.js.es6 +++ b/app/assets/javascripts/discourse/helpers/user-avatar.js.es6 @@ -1,6 +1,6 @@ import registerUnbound from 'discourse/helpers/register-unbound'; -export function renderAvatar(user, options) { +function renderAvatar(user, options) { options = options || {}; if (user) { @@ -44,3 +44,5 @@ export function renderAvatar(user, options) { registerUnbound('avatar', function(user, params) { return new Handlebars.SafeString(renderAvatar.call(this, user, params)); }); + +export { renderAvatar }; diff --git a/app/assets/javascripts/discourse/routes/build-topic-route.js.es6 b/app/assets/javascripts/discourse/routes/build-topic-route.js.es6 index d8cb0e02c..683b53cc6 100644 --- a/app/assets/javascripts/discourse/routes/build-topic-route.js.es6 +++ b/app/assets/javascripts/discourse/routes/build-topic-route.js.es6 @@ -1,7 +1,7 @@ import { queryParams } from 'discourse/controllers/discovery-sortable'; // A helper to build a topic route for a filter -export function filterQueryParams(params, defaultParams) { +function filterQueryParams(params, defaultParams) { var findOpts = defaultParams || {}; if (params) { Ember.keys(queryParams).forEach(function(opt) { @@ -74,3 +74,4 @@ export default function(filter, extras) { }, extras); } +export { filterQueryParams }; diff --git a/lib/es6_module_transpiler/tilt/es6_module_transpiler_template.rb b/lib/es6_module_transpiler/tilt/es6_module_transpiler_template.rb index 27a860c34..c914fb51f 100644 --- a/lib/es6_module_transpiler/tilt/es6_module_transpiler_template.rb +++ b/lib/es6_module_transpiler/tilt/es6_module_transpiler_template.rb @@ -1,4 +1,5 @@ require 'execjs' +require '6to5' module Tilt class ES6ModuleTranspilerTemplate < Tilt::Template @@ -14,6 +15,7 @@ module Tilt def self.create_new_context ctx = V8::Context.new(timeout: 5000) + ctx.eval("var self = this; #{File.read(ES6to5::Source.path)}") ctx.eval("module = {}; exports = {};"); ctx.load("#{Rails.root}/lib/es6_module_transpiler/support/es6-module-transpiler.js") ctx @@ -107,7 +109,9 @@ module Tilt private def generate_source(scope) - "new module.exports.Compiler(#{::JSON.generate(data, quirks_mode: true)}, '#{module_name(scope.root_path, scope.logical_path)}', #{compiler_options}).#{compiler_method}()" + js_source = ::JSON.generate(data, quirks_mode: true) + js_source = "to5.transform(#{js_source}, {ast: false, blacklist: ['es6.modules', 'useStrict']})['code']" + "new module.exports.Compiler(#{js_source}, '#{module_name(scope.root_path, scope.logical_path)}', #{compiler_options}).#{compiler_method}()" end def module_name(root_path, logical_path) diff --git a/test/javascripts/helpers/qunit-helpers.js.es6 b/test/javascripts/helpers/qunit-helpers.js.es6 index 3aa4b2fcc..111180cc5 100644 --- a/test/javascripts/helpers/qunit-helpers.js.es6 +++ b/test/javascripts/helpers/qunit-helpers.js.es6 @@ -2,7 +2,7 @@ import siteFixtures from 'fixtures/site_fixtures'; -export function integration(name, options) { +function integration(name, options) { module("Integration: " + name, { setup: function() { Ember.run(Discourse, Discourse.advanceReadiness); @@ -39,13 +39,13 @@ export function integration(name, options) { }); } -export function controllerFor(controller, model) { +function controllerFor(controller, model) { controller = Discourse.__container__.lookup('controller:' + controller); if (model) { controller.set('model', model ); } return controller; } -export function asyncTestDiscourse(text, func) { +function asyncTestDiscourse(text, func) { asyncTest(text, function () { var self = this; Ember.run(function () { @@ -54,9 +54,11 @@ export function asyncTestDiscourse(text, func) { }); } -export function fixture(selector) { +function fixture(selector) { if (selector) { return $("#qunit-fixture").find(selector); } return $("#qunit-fixture"); } + +export { integration, controllerFor, asyncTestDiscourse, fixture };