UNPKG

@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
"use strict"; 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; } }); } }