UNPKG

@kpi4me/golden-layout

Version:

A multi-screen javascript Layout manager https://golden-layout.com

621 lines (618 loc) 24.1 kB
// Generated by CoffeeScript 1.3.3 (function() { var __hasProp = {}.hasOwnProperty, __slice = [].slice, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; (function(exports) { var TAB, clone, eq, formatInterpolation, formatStringData, generate, indent, levels, needsParensWhenOnLeft, operators, parens, precedence; TAB = ' '; indent = function(code) { var line; return ((function() { var _i, _len, _ref, _results; _ref = code.split('\n'); _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { line = _ref[_i]; _results.push("" + TAB + line); } return _results; })()).join('\n'); }; parens = function(code) { return "(" + code + ")"; }; formatStringData = function(data) { return data.replace(/[^\x20-\x7e]|['\\]/, function(c) { var escape, pad; switch (c) { case '\0': return '\\0'; case '\b': return '\\b'; case '\t': return '\\t'; case '\n': return '\\n'; case '\f': return '\\f'; case '\r': return '\\r'; case '\'': return '\\\''; case '\\': return '\\\\'; default: escape = (c.charCodeAt(0)).toString(16); pad = "0000".slice(escape.length); return "\\u" + pad + escape; } }); }; formatInterpolation = function(ast, options) { var left, right; switch (ast.className) { case "ConcatOp": left = formatInterpolation(ast.left, options); right = formatInterpolation(ast.right, options); return "" + left + right; case "String": return formatStringData(ast.data); default: return "\#{" + (generate(ast, options)) + "}"; } }; needsParensWhenOnLeft = function(ast) { switch (ast.className) { case 'Function': case 'BoundFunction': case 'NewOp': return true; case 'Conditional': case 'Switch': case 'While': case 'Block': return true; case 'PreIncrementOp': case 'PreDecrementOp': case 'UnaryPlusOp': case 'UnaryNegateOp': case 'LogicalNotOp': case 'BitNotOp': case 'DoOp': case 'TypeofOp': case 'DeleteOp': return needsParensWhenOnLeft(ast.expression); case 'FunctionApplication': return ast["arguments"].length > 0; default: return false; } }; eq = function(nodeA, nodeB) { var i, prop, v, val, _i, _len; for (prop in nodeA) { if (!__hasProp.call(nodeA, prop)) continue; val = nodeA[prop]; if (prop === 'raw' || prop === 'line' || prop === 'column') { continue; } switch (Object.prototype.toString.call(val)) { case '[object Object]': if (!eq(nodeB[prop], val)) { return false; } break; case '[object Array]': for (i = _i = 0, _len = val.length; _i < _len; i = ++_i) { v = val[i]; if (!eq(nodeB[prop][i], v)) { return false; } } break; default: if (nodeB[prop] !== val) { return false; } } } return true; }; clone = function(obj, overrides) { var newObj, prop, val; if (overrides == null) { overrides = {}; } newObj = {}; for (prop in obj) { if (!__hasProp.call(obj, prop)) continue; val = obj[prop]; newObj[prop] = val; } for (prop in overrides) { if (!__hasProp.call(overrides, prop)) continue; val = overrides[prop]; newObj[prop] = val; } return newObj; }; levels = [['SeqOp'], ['Conditional', 'ForIn', 'ForOf', 'While'], ['FunctionApplication', 'SoakedFunctionApplication'], ['AssignOp', 'CompoundAssignOp', 'ExistsAssignOp'], ['LogicalOrOp'], ['LogicalAndOp'], ['BitOrOp'], ['BitXorOp'], ['BitAndOp'], ['ExistsOp'], ['EQOp', 'NEQOp'], ['LTOp', 'LTEOp', 'GTOp', 'GTEOp', 'InOp', 'OfOp', 'InstanceofOp'], ['LeftShiftOp', 'SignedRightShiftOp', 'UnsignedRightShiftOp'], ['PlusOp', 'SubtractOp'], ['MultiplyOp', 'DivideOp', 'RemOp'], ['UnaryPlusOp', 'UnaryNegateOp', 'LogicalNotOp', 'BitNotOp', 'DoOp', 'TypeofOp', 'PreIncrementOp', 'PreDecrementOp', 'DeleteOp'], ['UnaryExistsOp', 'ShallowCopyArray', 'PostIncrementOp', 'PostDecrementOp', 'Spread'], ['NewOp'], ['MemberAccessOp', 'SoakedMemberAccessOp', 'DynamicMemberAccessOp', 'SoakedDynamicMemberAccessOp', 'ProtoMemberAccessOp', 'DynamicProtoMemberAccessOp', 'SoakedProtoMemberAccessOp', 'SoakedDynamicProtoMemberAccessOp']]; precedence = {}; (function() { var level, op, ops, _i, _len, _results; _results = []; for (level = _i = 0, _len = levels.length; _i < _len; level = ++_i) { ops = levels[level]; _results.push((function() { var _j, _len1, _results1; _results1 = []; for (_j = 0, _len1 = ops.length; _j < _len1; _j++) { op = ops[_j]; _results1.push(precedence[op] = level); } return _results1; })()); } return _results; })(); operators = { SeqOp: ';', LogicalOrOp: 'or', LogicalAndOp: 'and', BitOrOp: '|', BitXorOp: '^', BitAndOp: '&', EQOp: 'is', NEQOp: 'isnt', LTOp: '<', LTEOp: '<=', GTOp: '>', GTEOp: '>=', InOp: 'in', OfOp: 'of', InstanceofOp: 'instanceof', LeftShiftOp: '<<', SignedRightShiftOp: '>>', UnsignedRightShiftOp: '>>>', PlusOp: '+', SubtractOp: '-', MultiplyOp: '*', DivideOp: '/', RemOp: '%', UnaryPlusOp: '+', UnaryNegateOp: '-', LogicalNotOp: 'not ', BitNotOp: '~', DoOp: 'do ', NewOp: 'new ', TypeofOp: 'typeof ', PreIncrementOp: '++', PreDecrementOp: '--', UnaryExistsOp: '?', ShallowCopyArray: '[..]', PostIncrementOp: '++', PostDecrementOp: '--', Spread: '...', FunctionApplication: '', SoakedFunctionApplication: '?', MemberAccessOp: '.', SoakedMemberAccessOp: '?.', ProtoMemberAccessOp: '::', SoakedProtoMemberAccessOp: '?::', DynamicMemberAccessOp: '', SoakedDynamicMemberAccessOp: '?', DynamicProtoMemberAccessOp: '::', SoakedDynamicProtoMemberAccessOp: '?::' }; return exports.generate = generate = function(ast, options) { var a, absNum, arg, args, expression_, hasAlternate, i, isMultiline, key_, m, memberAccessOps, members_, needsParens, p, parameters, parent, parentClassName, prec, s, sep, src, usedAsExpression, _alternate, _argList, _args, _assignee, _block, _body, _consequent, _ctor, _expr, _fn, _indexingExpr, _left, _op, _paramList, _ref, _ref1, _right; if (options == null) { options = {}; } needsParens = false; if ((_ref = options.precedence) == null) { options.precedence = 0; } if ((_ref1 = options.ancestors) == null) { options.ancestors = []; } parent = options.ancestors[0]; parentClassName = parent != null ? parent.className : void 0; usedAsExpression = (parent != null) && parentClassName !== 'Block'; src = (function() { var _i, _len, _ref2, _ref3, _ref4, _ref5, _ref6; switch (ast.className) { case 'Program': options.ancestors = [ast].concat(__slice.call(options.ancestors)); if (ast.body != null) { return generate(ast.body, options); } else { return ''; } break; case 'Block': options = clone(options, { ancestors: [ast].concat(__slice.call(options.ancestors)), precedence: 0 }); if (ast.statements.length === 0) { return generate((new Undefined).g(), options); } else { sep = parentClassName === 'Program' ? '\n\n' : '\n'; return ((function() { var _i, _len, _ref2, _results; _ref2 = ast.statements; _results = []; for (_i = 0, _len = _ref2.length; _i < _len; _i++) { s = _ref2[_i]; _results.push(generate(s, options)); } return _results; })()).join(sep); } break; case 'Conditional': options.ancestors.unshift(ast); options.precedence = 0; hasAlternate = (ast.consequent != null) && (ast.alternate != null); _consequent = generate((_ref2 = ast.consequent) != null ? _ref2 : (new Undefined).g(), options); _alternate = hasAlternate ? generate(ast.alternate, options) : ""; isMultiline = _consequent.length > 90 || _alternate.length > 90 || __indexOf.call(_alternate, '\n') >= 0 || __indexOf.call(_consequent, '\n') >= 0; _consequent = isMultiline ? "\n" + (indent(_consequent)) : " then " + _consequent; if (hasAlternate) { _alternate = isMultiline ? "\nelse\n" + (indent(_alternate)) : " else " + _alternate; } return "if " + (generate(ast.condition, options)) + _consequent + _alternate; case 'Identifier': return ast.data; case 'Null': return 'null'; case 'This': return 'this'; case 'Undefined': return 'undefined'; case 'Int': absNum = ast.data < 0 ? -ast.data : ast.data; if (absNum >= 1e12 || (absNum >= 0x10 && 0 === (absNum & (absNum - 1)))) { return "0x" + (ast.data.toString(16)); } else { return ast.data.toString(10); } break; case 'Float': return ast.data.toString(10); case 'String': return "'" + (formatStringData(ast.data)) + "'"; case 'ArrayInitialiser': options = clone(options, { ancestors: [ast].concat(__slice.call(options.ancestors)), precedence: precedence.AssignmentExpression }); members_ = (function() { var _i, _len, _ref3, _results; _ref3 = ast.members; _results = []; for (_i = 0, _len = _ref3.length; _i < _len; _i++) { m = _ref3[_i]; _results.push(generate(m, options)); } return _results; })(); switch (ast.members.length) { case 0: return '[]'; case 1: case 2: for (i = _i = 0, _len = members_.length; _i < _len; i = ++_i) { m = members_[i]; if (i + 1 !== members_.length) { if (needsParensWhenOnLeft(ast.members[i])) { members_[i] = parens(m); } } } return "[" + (members_.join(', ')) + "]"; default: return "[\n" + (indent(members_.join('\n'))) + "\n]"; } break; case 'ObjectInitialiser': options.ancestors = [ast].concat(__slice.call(options.ancestors)); members_ = (function() { var _j, _len1, _ref3, _results; _ref3 = ast.members; _results = []; for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) { m = _ref3[_j]; _results.push(generate(m, options)); } return _results; })(); switch (ast.members.length) { case 0: return '{}'; case 1: return "{" + (members_.join(', ')) + "}"; default: return "{\n" + (indent(members_.join('\n'))) + "\n}"; } break; case 'ObjectInitialiserMember': options = clone(options, { ancestors: [ast].concat(__slice.call(options.ancestors)), precedence: precedence.AssignmentExpression }); key_ = generate(ast.key, options); expression_ = generate(ast.expression, options); memberAccessOps = ['MemberAccessOp', 'ProtoMemberAccessOp', 'SoakedMemberAccessOp', 'SoakedProtoMemberAccessOp']; if (eq(ast.key, ast.expression)) { return "" + key_; } else if ((_ref3 = ast.expression.className, __indexOf.call(memberAccessOps, _ref3) >= 0) && ast.key.data === ast.expression.memberName) { return "" + expression_; } else { return "" + key_ + ": " + expression_; } break; case 'Function': case 'BoundFunction': options = clone(options, { ancestors: [ast].concat(__slice.call(options.ancestors)), precedence: precedence.AssignmentExpression }); parameters = (function() { var _j, _len1, _ref4, _results; _ref4 = ast.parameters; _results = []; for (_j = 0, _len1 = _ref4.length; _j < _len1; _j++) { p = _ref4[_j]; _results.push(generate(p, options)); } return _results; })(); options.precedence = 0; _body = !(ast.body != null) || ast.body.className === 'Undefined' ? '' : generate(ast.body, options); _paramList = ast.parameters.length > 0 ? "(" + (parameters.join(', ')) + ") " : ''; _block = _body.length === 0 ? '' : _paramList.length + _body.length < 100 && __indexOf.call(_body, '\n') < 0 ? " " + _body : "\n" + (indent(_body)); switch (ast.className) { case 'Function': return "" + _paramList + "->" + _block; case 'BoundFunction': return "" + _paramList + "=>" + _block; } break; case 'AssignOp': prec = precedence[ast.className]; needsParens = prec < options.precedence; options = clone(options, { ancestors: [ast].concat(__slice.call(options.ancestors)), precedence: prec }); _assignee = generate(ast.assignee, options); _expr = generate(ast.expression, options); return "" + _assignee + " = " + _expr; case 'CompoundAssignOp': prec = precedence[ast.className]; needsParens = prec < options.precedence; options = clone(options, { ancestors: [ast].concat(__slice.call(options.ancestors)), precedence: prec }); _op = operators[ast.op.prototype.className]; _assignee = generate(ast.assignee, options); _expr = generate(ast.expression, options); return "" + _assignee + " " + _op + "= " + _expr; case 'SeqOp': prec = precedence[ast.className]; needsParens = prec < options.precedence; options = clone(options, { ancestors: [ast].concat(__slice.call(options.ancestors)), precedence: prec }); _left = generate(ast.left, options); _right = generate(ast.right, options); return "" + _left + "; " + _right; case 'LogicalOrOp': case 'LogicalAndOp': case 'BitOrOp': case 'BitXorOp': case 'BitAndOp': case 'LeftShiftOp': case 'SignedRightShiftOp': case 'UnsignedRightShiftOp': case 'EQOp': case 'NEQOp': case 'LTOp': case 'LTEOp': case 'GTOp': case 'GTEOp': case 'InOp': case 'OfOp': case 'InstanceofOp': case 'PlusOp': case 'SubtractOp': case 'MultiplyOp': case 'DivideOp': case 'RemOp': case 'ExistsOp': _op = operators[ast.className]; if (((_ref4 = ast.className) === 'InOp' || _ref4 === 'OfOp' || _ref4 === 'InstanceofOp') && parentClassName === 'LogicalNotOp') { _op = "not " + _op; } prec = precedence[ast.className]; needsParens = prec < options.precedence; options = clone(options, { ancestors: [ast].concat(__slice.call(options.ancestors)), precedence: prec }); _left = generate(ast.left, options); if (needsParensWhenOnLeft(ast.left)) { _left = parens(_left); } _right = generate(ast.right, options); return "" + _left + " " + _op + " " + _right; case 'UnaryPlusOp': case 'UnaryNegateOp': case 'LogicalNotOp': case 'BitNotOp': case 'DoOp': case 'TypeofOp': case 'PreIncrementOp': case 'PreDecrementOp': _op = operators[ast.className]; prec = precedence[ast.className]; if (ast.className === 'LogicalNotOp') { if ((_ref5 = ast.expression.className) === 'InOp' || _ref5 === 'OfOp' || _ref5 === 'InstanceofOp') { _op = ''; prec = precedence[ast.expression.className]; } if ('LogicalNotOp' === parentClassName || 'LogicalNotOp' === ast.expression.className) { _op = '!'; } } needsParens = prec < options.precedence; if (parentClassName === ast.className && ((_ref6 = ast.className) === 'UnaryPlusOp' || _ref6 === 'UnaryNegateOp')) { needsParens = true; } options = clone(options, { ancestors: [ast].concat(__slice.call(options.ancestors)), precedence: prec }); return "" + _op + (generate(ast.expression, options)); case 'UnaryExistsOp': case 'PostIncrementOp': case 'PostDecrementOp': case 'Spread': _op = operators[ast.className]; prec = precedence[ast.className]; needsParens = prec < options.precedence; options = clone(options, { ancestors: [ast].concat(__slice.call(options.ancestors)), precedence: prec }); _expr = generate(ast.expression, options); if (needsParensWhenOnLeft(ast.expression)) { _expr = parens(_expr); } return "" + _expr + _op; case 'NewOp': _op = operators[ast.className]; prec = precedence[ast.className]; options = clone(options, { ancestors: [ast].concat(__slice.call(options.ancestors)), precedence: prec }); _ctor = generate(ast.ctor, options); if (ast["arguments"].length > 0 && needsParensWhenOnLeft(ast.ctor)) { _ctor = parens(_ctor); } options.precedence = precedence['AssignOp']; args = (function() { var _j, _len1, _ref7, _results; _ref7 = ast["arguments"]; _results = []; for (i = _j = 0, _len1 = _ref7.length; _j < _len1; i = ++_j) { a = _ref7[i]; arg = generate(a, options); if ((needsParensWhenOnLeft(a)) && i + 1 !== ast["arguments"].length) { arg = parens(arg); } _results.push(arg); } return _results; })(); _args = ast["arguments"].length === 0 ? '' : " " + (args.join(', ')); return "" + _op + _ctor + _args; case 'FunctionApplication': case 'SoakedFunctionApplication': if (ast.className === 'FunctionApplication' && ast["arguments"].length === 0 && !usedAsExpression) { return generate(new DoOp(ast["function"]), options); } else { options = clone(options, { ancestors: [ast].concat(__slice.call(options.ancestors)), precedence: precedence[ast.className] }); _op = operators[ast.className]; _fn = generate(ast["function"], options); if (needsParensWhenOnLeft(ast["function"])) { _fn = parens(_fn); } args = (function() { var _j, _len1, _ref7, _results; _ref7 = ast["arguments"]; _results = []; for (i = _j = 0, _len1 = _ref7.length; _j < _len1; i = ++_j) { a = _ref7[i]; arg = generate(a, options); if ((needsParensWhenOnLeft(a)) && i + 1 !== ast["arguments"].length) { arg = parens(arg); } _results.push(arg); } return _results; })(); _argList = ast["arguments"].length === 0 ? '()' : " " + (args.join(', ')); return "" + _fn + _op + _argList; } break; case 'MemberAccessOp': case 'SoakedMemberAccessOp': case 'ProtoMemberAccessOp': case 'SoakedProtoMemberAccessOp': _op = operators[ast.className]; prec = precedence[ast.className]; needsParens = prec < options.precedence; options = clone(options, { ancestors: [ast].concat(__slice.call(options.ancestors)), precedence: prec }); if (ast.expression.className === 'This') { _expr = '@'; if (ast.className === 'MemberAccessOp') { _op = ''; } } else { _expr = generate(ast.expression, options); if (needsParensWhenOnLeft(ast.expression)) { _expr = parens(_expr); } } return "" + _expr + _op + ast.memberName; case 'DynamicMemberAccessOp': case 'SoakedDynamicMemberAccessOp': case 'DynamicProtoMemberAccessOp': case 'SoakedDynamicProtoMemberAccessOp': _op = operators[ast.className]; prec = precedence[ast.className]; needsParens = prec < options.precedence; options = clone(options, { ancestors: [ast].concat(__slice.call(options.ancestors)), precedence: prec }); if (ast.expression.className === 'This') { _expr = '@'; } else { _expr = generate(ast.expression, options); if (needsParensWhenOnLeft(ast.expression)) { _expr = parens(_expr); } } options.precedence = 0; _indexingExpr = generate(ast.indexingExpr, options); return "" + _expr + _op + "[" + _indexingExpr + "]"; case 'ConcatOp': _left = formatInterpolation(ast.left, options); _right = formatInterpolation(ast.right, options); return "\"" + _left + _right + "\""; default: throw new Error("Non-exhaustive patterns in case: " + ast.className); } })(); if (needsParens) { return parens(src); } else { return src; } }; })(typeof exports !== "undefined" && exports !== null ? exports : this.cscodegen = {}); }).call(this);