FIX: Safari strict mode errors

This commit is contained in:
Robin Ward 2016-07-13 15:36:34 -04:00
parent 29c9979b9b
commit 00e45c0d3c
3 changed files with 84 additions and 73 deletions

View File

@ -14,7 +14,7 @@ const RawHandlebars = Handlebars.create();
RawHandlebars.helper = function() {}; RawHandlebars.helper = function() {};
RawHandlebars.helpers = objectCreate(Handlebars.helpers); RawHandlebars.helpers = objectCreate(Handlebars.helpers);
RawHandlebars.helpers.get = function(context, options){ RawHandlebars.helpers['get'] = function(context, options) {
var firstContext = options.contexts[0]; var firstContext = options.contexts[0];
var val = firstContext[context]; var val = firstContext[context];
@ -38,7 +38,7 @@ function stringCompatHelper(fn) {
RawHandlebars.registerHelper('each', function(localName,inKeyword,contextName,options){ RawHandlebars.registerHelper('each', function(localName,inKeyword,contextName,options){
var list = Em.get(this, contextName); var list = Em.get(this, contextName);
var output = []; var output = [];
var innerContext = Object.create(this); var innerContext = objectCreate(this);
for (var i=0; i<list.length; i++) { for (var i=0; i<list.length; i++) {
innerContext[localName] = list[i]; innerContext[localName] = list[i];
output.push(options.fn(innerContext)); output.push(options.fn(innerContext));
@ -51,19 +51,7 @@ stringCompatHelper("unless");
stringCompatHelper("with"); stringCompatHelper("with");
if (Handlebars.Compiler) { function buildPath(blk, args) {
RawHandlebars.Compiler = function() {};
RawHandlebars.Compiler.prototype = objectCreate(Handlebars.Compiler.prototype);
RawHandlebars.Compiler.prototype.compiler = RawHandlebars.Compiler;
RawHandlebars.JavaScriptCompiler = function() {};
RawHandlebars.JavaScriptCompiler.prototype = objectCreate(Handlebars.JavaScriptCompiler.prototype);
RawHandlebars.JavaScriptCompiler.prototype.compiler = RawHandlebars.JavaScriptCompiler;
RawHandlebars.JavaScriptCompiler.prototype.namespace = "RawHandlebars";
function buildPath(blk, args) {
var result = { type: "PathExpression", var result = { type: "PathExpression",
data: false, data: false,
depth: blk.path.depth, depth: blk.path.depth,
@ -75,9 +63,9 @@ if (Handlebars.Compiler) {
}); });
return result; return result;
} }
function replaceGet(ast) { function replaceGet(ast) {
var visitor = new Handlebars.Visitor(); var visitor = new Handlebars.Visitor();
visitor.mutating = true; visitor.mutating = true;
@ -104,7 +92,18 @@ if (Handlebars.Compiler) {
}; };
visitor.accept(ast); visitor.accept(ast);
} }
if (Handlebars.Compiler) {
RawHandlebars.Compiler = function() {};
RawHandlebars.Compiler.prototype = objectCreate(Handlebars.Compiler.prototype);
RawHandlebars.Compiler.prototype.compiler = RawHandlebars.Compiler;
RawHandlebars.JavaScriptCompiler = function() {};
RawHandlebars.JavaScriptCompiler.prototype = objectCreate(Handlebars.JavaScriptCompiler.prototype);
RawHandlebars.JavaScriptCompiler.prototype.compiler = RawHandlebars.JavaScriptCompiler;
RawHandlebars.JavaScriptCompiler.prototype.namespace = "RawHandlebars";
RawHandlebars.precompile = function(value, asObject) { RawHandlebars.precompile = function(value, asObject) {
var ast = Handlebars.parse(value); var ast = Handlebars.parse(value);

View File

@ -399,7 +399,7 @@ export function cook(raw, opts) {
if (keys.length) { if (keys.length) {
let found = true; let found = true;
function unhoist(key) { const unhoist = function(key) {
result = result.replace(new RegExp(key, "g"), function() { result = result.replace(new RegExp(key, "g"), function() {
found = true; found = true;
return hoisted[key]; return hoisted[key];

View File

@ -45,10 +45,7 @@ export function register(helper, codeName, args, emitter) {
}); });
}; };
export function setup(helper) { export function builders(helper) {
helper.whiteList(['span.bbcode-b', 'span.bbcode-i', 'span.bbcode-u', 'span.bbcode-s']);
function replaceBBCode(tag, emitter, opts) { function replaceBBCode(tag, emitter, opts) {
const start = `[${tag}]`; const start = `[${tag}]`;
const stop = `[/${tag}]`; const stop = `[/${tag}]`;
@ -59,21 +56,28 @@ export function setup(helper) {
opts = _.merge(opts, { start: start.toUpperCase(), stop: stop.toUpperCase(), emitter }); opts = _.merge(opts, { start: start.toUpperCase(), stop: stop.toUpperCase(), emitter });
helper.inlineBetween(opts); helper.inlineBetween(opts);
};
function rawBBCode(tag, emitter) {
replaceBBCode(tag, emitter, { rawContents: true });
} }
function removeEmptyLines(contents) { return {
replaceBBCode,
register(codeName, args, emitter) {
register(helper, codeName, args, emitter);
},
rawBBCode(tag, emitter) {
replaceBBCode(tag, emitter, { rawContents: true });
},
removeEmptyLines(contents) {
const result = []; const result = [];
for (let i=0; i < contents.length; i++) { for (let i=0; i < contents.length; i++) {
if (contents[i] !== "\n") { result.push(contents[i]); } if (contents[i] !== "\n") { result.push(contents[i]); }
} }
return result; return result;
} },
function replaceBBCodeParamsRaw(tag, emitter) { replaceBBCodeParamsRaw(tag, emitter) {
var opts = { var opts = {
rawContents: true, rawContents: true,
emitter(contents) { emitter(contents) {
@ -87,6 +91,14 @@ export function setup(helper) {
tag = tag.toUpperCase(); tag = tag.toUpperCase();
helper.inlineBetween(_.merge(opts, { start: "[" + tag + "=", stop: "[/" + tag + "]" })); helper.inlineBetween(_.merge(opts, { start: "[" + tag + "=", stop: "[/" + tag + "]" }));
} }
};
}
export function setup(helper) {
helper.whiteList(['span.bbcode-b', 'span.bbcode-i', 'span.bbcode-u', 'span.bbcode-s']);
const { replaceBBCode, rawBBCode, removeEmptyLines, replaceBBCodeParamsRaw } = builders(helper);
replaceBBCode('b', contents => ['span', {'class': 'bbcode-b'}].concat(contents)); replaceBBCode('b', contents => ['span', {'class': 'bbcode-b'}].concat(contents));
replaceBBCode('i', contents => ['span', {'class': 'bbcode-i'}].concat(contents)); replaceBBCode('i', contents => ['span', {'class': 'bbcode-i'}].concat(contents));