@extjs/sencha-cmd-linux-32
Version:
Productivity and performance optimization tool for building applications with Sencha Ext JS and Sencha Touch.
132 lines (114 loc) • 4.88 kB
JavaScript
;
var Fashion = require('../export/Base.js');
var Literal = require('../export/type/Literal.js');
var Text = require('../export/type/Text.js');
var Bool = require('../export/type/Bool.js');
module.exports = {
init(runtime) {
runtime.register({
type_of: function (value) {
if (value === true || value === false) {
return new Literal('bool');
}
if (value === Literal.Null) {
return new Literal('null');
}
if (value.type == 'hsla' || value.type == 'rgba') {
return new Literal('color');
}
if (value.type == 'literal' || value.type == 'string') {
return new Literal('string');
}
return new Literal(value.type);
},
unit: function (number) {
if (!number.$isFashionNumber) {
Fashion.raise(number + ' is not a number for \'unit\'');
}
return new Text(number.getUnitStr() || '');
},
unitless: function (number) {
if (number.type != 'number') {
Fashion.raise(number + ' is not a number for \'unitless\'');
}
return new Bool(!number.unit);
},
strip_unit: function(a) {
if (!a || !a.$isFashionNumber) {
var val = (a ? a.toDisplayString() : '[null]');
Fashion.raise(val + ' is not a number for \'strip-unit\'');
}
return new Fashion.Numeric(a.value);
},
comparable: function (number_1, number_2) {
if (number_1.type != 'number') {
Fashion.raise(number_1 + ' is not a number for \'comparable\'');
}
if (number_2.type != 'number') {
Fashion.raise(number_2 + ' is not a number for \'comparable\'');
}
return new Bool(!!number_1.comparable(number_2));
},
variable_exists: function (name) {
var nameStr = name;
if (name.$isFashionString || name.$isFashionLiteral) {
nameStr = name.value;
}
nameStr = Fashion.getJsName(nameStr);
if (nameStr.indexOf('$') !== 0) {
nameStr = "$" + nameStr;
}
var scope = this.getRuntime().getCurrentScope();
return !!scope.get(nameStr);
},
global_variable_exists: function (name) {
var nameStr = name;
if (name.$isFashionString || name.$isFashionLiteral) {
nameStr = name.value;
}
nameStr = Fashion.getJsName(nameStr);
if (nameStr.indexOf('$') !== 0) {
nameStr = "$" + nameStr;
}
var scope = this.getRuntime().getGlobalScope();
return !!scope.get(nameStr);
},
function_exists: function (name) {
var nameStr = name;
if (name.$isFashionString || name.$isFashionLiteral) {
nameStr = name.value;
}
nameStr = Fashion.getJsName(nameStr);
var extensions = this.getRuntime().getRegisteredFunctions(),
functions = this.getRuntime().getFunctions();
return (nameStr in extensions) || (nameStr in functions);
},
mixin_exists: function (name) {
var nameStr = name;
if (name.$isFashionString || name.$isFashionLiteral) {
nameStr = name.value;
}
nameStr = Fashion.getJsName(nameStr);
var mixins = this.getRuntime().getMixins();
return (nameStr in mixins);
},
call: function (name) {
if (!name || !name.$isFashionLiteral) {
Fashion.raise(name + ' is not a string or literal for \'call\'');
}
var args = this.sliceArgs(arguments, 1),
runtime = this.getRuntime(),
functions = runtime.getFunctions(),
extensions = runtime.getRegisteredFunctions(),
funcName = getJsName(name.value);
if (functions[funcName]) {
return functions[funcName].apply(functions, args);
}
else if (extensions[funcName]) {
return extensions[funcName].apply(this, args);
}
return Literal.Null;
}
});
}
}