Merge pull request #186 from sveltejs/gh-185

allow whitelisted globals
pull/201/head
Rich Harris 9 years ago committed by GitHub
commit 9e347f1685

@ -6,8 +6,9 @@ import isReference from '../utils/isReference.js';
import counter from './utils/counter.js';
import flattenReference from '../utils/flattenReference.js';
import visitors from './visitors/index.js';
import globalWhitelist from '../utils/globalWhitelist.js';
export default function generator ( parsed, source, names ) {
export default function createGenerator ( parsed, source, names ) {
const generator = {
addElement ( name, renderStatement, needsIdentifier = false ) {
const isToplevel = generator.current.localElementDepth === 0;
@ -130,22 +131,31 @@ export default function generator ( parsed, source, names ) {
if ( parent && parent.type === 'CallExpression' && node === parent.callee && generator.helpers[ name ] ) {
generator.code.prependRight( node.start, `template.helpers.` );
return;
}
if ( name === 'event' && isEventHandler ) {
return;
else if ( name === 'event' && isEventHandler ) {
// noop
}
if ( contexts[ name ] ) {
else if ( contexts[ name ] ) {
dependencies.push( ...contextDependencies[ name ] );
if ( !~usedContexts.indexOf( name ) ) usedContexts.push( name );
} else if ( indexes[ name ] ) {
}
else if ( indexes[ name ] ) {
const context = indexes[ name ];
if ( !~usedContexts.indexOf( context ) ) usedContexts.push( context );
} else {
}
else {
if ( globalWhitelist[ name ] ) {
generator.code.prependRight( node.start, `( '${name}' in root ? root.` );
generator.code.appendLeft( node.object.end, ` : ${name} )` );
} else {
generator.code.prependRight( node.start, `root.` );
}
dependencies.push( name );
generator.code.prependRight( node.start, `root.` );
if ( !~usedContexts.indexOf( 'root' ) ) usedContexts.push( 'root' );
}

@ -5,12 +5,12 @@ import namespaces from '../utils/namespaces.js';
import getIntro from './utils/getIntro.js';
import getOutro from './utils/getOutro.js';
import processCss from './css/process.js';
import Generator from './generator.js';
import createGenerator from './createGenerator.js';
export default function generate ( parsed, source, options, names ) {
const format = options.format || 'es';
const generator = Generator( parsed, source, names );
const generator = createGenerator( parsed, source, names );
const templateProperties = {};
const imports = [];

@ -0,0 +1,26 @@
export default {
Array: true,
Boolean: true,
console: true,
Date: true,
decodeURI: true,
decodeURIComponent: true,
encodeURI: true,
encodeURIComponent: true,
Infinity: true,
Intl: true,
isFinite: true,
isNaN: true,
JSON: true,
Map: true,
Math: true,
NaN: true,
Number: true,
Object: true,
parseFloat: true,
parseInt: true,
RegExp: true,
Set: true,
String: true,
undefined: true,
};

@ -0,0 +1,12 @@
export default {
data: {
x: 10
},
html: '5',
test ( assert, component, target ) {
component.set({ x: 3 });
assert.htmlEqual( target.innerHTML, '3' );
}
};

@ -0,0 +1,12 @@
export default {
data: {
x: 10
},
html: 'potato',
test ( assert, component, target ) {
component.set({ x: 3 });
assert.htmlEqual( target.innerHTML, 'potato' );
}
};

@ -0,0 +1,15 @@
{{Math.min(x, 5)}}
<script>
export default {
data () {
return {
Math: {
min ( a, b ) {
return 'potato';
}
}
};
}
};
</script>

@ -0,0 +1,12 @@
export default {
data: {
x: 10
},
html: 'potato',
test ( assert, component, target ) {
component.set({ x: 3 });
assert.htmlEqual( target.innerHTML, 'potato' );
}
};

@ -0,0 +1,13 @@
{{Math.min(x, 5)}}
<script>
export default {
helpers: {
Math: {
min ( a, b ) {
return 'potato';
}
}
}
};
</script>
Loading…
Cancel
Save