/* Game of Life * Implemented in TypeScript * To learn more about TypeScript, please visit http://www.typescriptlang.org/ */ module Conway { export class Cell { public row: number; public col: number; public live: boolean; constructor(row: number, col: number, live: boolean) { this.row = row; this.col = col; this.live = live } } export class GameOfLife { private gridSize: number; private canvasSize: number; private lineColor: string; private liveColor: string; private deadColor: string; private initialLifeProbability: number; private animationRate: number; private cellSize: number; private context: CanvasRenderingContext2D; private world; constructor() { this.gridSize = 50; this.canvasSize = 600; this.lineColor = '#cdcdcd'; this.liveColor = '#666'; this.deadColor = '#eee'; this.initialLifeProbability = 0.5; this.animationRate = 60; this.cellSize = 0; this.world = this.createWorld(); this.circleOfLife(); } public createWorld() { return this.travelWorld( (cell : Cell) => { cell.live = Math.random() < this.initialLifeProbability; return cell; }); } public circleOfLife() : void { this.world = this.travelWorld( (cell: Cell) => { cell = this.world[cell.row][cell.col]; this.draw(cell); return this.resolveNextGeneration(cell); }); setTimeout( () => {this.circleOfLife()}, this.animationRate); } public resolveNextGeneration(cell : Cell) { var count = this.countNeighbors(cell); var newCell = new Cell(cell.row, cell.col, cell.live); if(count < 2 || count > 3) newCell.live = false; else if(count == 3) newCell.live = true; return newCell; } public countNeighbors(cell : Cell) { var neighbors = 0; for(var row = -1; row <=1; row++) { for(var col = -1; col <= 1; col++) { if(row == 0 && col == 0) continue; if(this.isAlive(cell.row + row, cell.col + col)) { neighbors++; } } } return neighbors; } public isAlive(row : number, col : number) { if(row < 0 || col < 0 || row >= this.gridSize || col >= this.gridSize) return false; return this.world[row][col].live; } public travelWorld(callback) { var result = []; for(var row = 0; row < this.gridSize; row++) { var rowData = []; for(var col = 0; col < this.gridSize; col++) { rowData.push(callback(new Cell(row, col, false))); } result.push(rowData); } return result; } public draw(cell : Cell) { if(this.context == null) this.context = this.createDrawingContext(); if(this.cellSize == 0) this.cellSize = this.canvasSize/this.gridSize; this.context.strokeStyle = this.lineColor; this.context.strokeRect(cell.row * this.cellSize, cell.col*this.cellSize, this.cellSize, this.cellSize); this.context.fillStyle = cell.live ? this.liveColor : this.deadColor; this.context.fillRect(cell.row * this.cellSize, cell.col*this.cellSize, this.cellSize, this.cellSize); } public createDrawingContext() { var canvas = <HTMLCanvasElement> document.getElementById('conway-canvas'); if(canvas == null) { canvas = document.createElement('canvas'); canvas.id = 'conway-canvas'; canvas.width = this.canvasSize; canvas.height = this.canvasSize; document.body.appendChild(canvas); } return canvas.getContext('2d'); } } } var game = new Conway.GameOfLife();
/* © Microsoft. All rights reserved. This library is supported for use in Windows Tailored Apps only. Build: 6.2.8100.0 Version: 0.5 */ (function (global, undefined) { "use strict"; undefinedVariable = {}; undefinedVariable.prop = 5; function initializeProperties(target, members) { var keys = Object.keys(members); var properties; var i, len; for (i = 0, len = keys.length; i < len; i++) { var key = keys[i]; var enumerable = key.charCodeAt(0) !== /*_*/95; var member = members[key]; if (member && typeof member === 'object') { if (member.value !== undefined || typeof member.get === 'function' || typeof member.set === 'function') { if (member.enumerable === undefined) { member.enumerable = enumerable; } properties = properties || {}; properties[key] = member; continue; } } // These next lines will be deleted if (!enumerable) { properties = properties || {}; properties[key] = { value: member, enumerable: enumerable, configurable: true, writable: true } continue; } target[key] = member; } if (properties) { Object.defineProperties(target, properties); } } (function (rootNamespace) { // Create the rootNamespace in the global namespace if (!global[rootNamespace]) { global[rootNamespace] = Object.create(Object.prototype); } // Cache the rootNamespace we just created in a local variable var _rootNamespace = global[rootNamespace]; if (!_rootNamespace.Namespace) { _rootNamespace.Namespace = Object.create(Object.prototype); } function defineWithParent(parentNamespace, name, members) { /// <summary locid="1"> /// Defines a new namespace with the specified name, under the specified parent namespace. /// </summary> /// <param name="parentNamespace" type="Object" locid="2"> /// The parent namespace which will contain the new namespace. /// </param> /// <param name="name" type="String" locid="3"> /// Name of the new namespace. /// </param> /// <param name="members" type="Object" locid="4"> /// Members in the new namespace. /// </param> /// <returns locid="5"> /// The newly defined namespace. /// </returns> var currentNamespace = parentNamespace, namespaceFragments = name.split("."); for (var i = 0, len = namespaceFragments.length; i < len; i++) { var namespaceName = namespaceFragments[i]; if (!currentNamespace[namespaceName]) { Object.defineProperty(currentNamespace, namespaceName, { value: {}, writable: false, enumerable: true, configurable: true } ); } currentNamespace = currentNamespace[namespaceName]; } if (members) { initializeProperties(currentNamespace, members); } return currentNamespace; } function define(name, members) { /// <summary locid="6"> /// Defines a new namespace with the specified name. /// </summary> /// <param name="name" type="String" locid="7"> /// Name of the namespace. This could be a dot-separated nested name. /// </param> /// <param name="members" type="Object" locid="4"> /// Members in the new namespace. /// </param> /// <returns locid="5"> /// The newly defined namespace. /// </returns> return defineWithParent(global, name, members); } // Establish members of the "WinJS.Namespace" namespace Object.defineProperties(_rootNamespace.Namespace, { defineWithParent: { value: defineWithParent, writable: true, enumerable: true }, define: { value: define, writable: true, enumerable: true } }); })("WinJS"); (function (WinJS) { function define(constructor, instanceMembers, staticMembers) { /// <summary locid="8"> /// Defines a class using the given constructor and with the specified instance members. /// </summary> /// <param name="constructor" type="Function" locid="9"> /// A constructor function that will be used to instantiate this class. /// </param> /// <param name="instanceMembers" type="Object" locid="10"> /// The set of instance fields, properties and methods to be made available on the class. /// </param> /// <param name="staticMembers" type="Object" locid="11"> /// The set of static fields, properties and methods to be made available on the class. /// </param> /// <returns type="Function" locid="12"> /// The newly defined class. /// </returns> constructor = constructor || function () { }; if (instanceMembers) { initializeProperties(constructor.prototype, instanceMembers); } if (staticMembers) { initializeProperties(constructor, staticMembers); } return constructor; } function derive(baseClass, constructor, instanceMembers, staticMembers) { /// <summary locid="13"> /// Uses prototypal inheritance to create a sub-class based on the supplied baseClass parameter. /// </summary> /// <param name="baseClass" type="Function" locid="14"> /// The class to inherit from. /// </param> /// <param name="constructor" type="Function" locid="9"> /// A constructor function that will be used to instantiate this class. /// </param> /// <param name="instanceMembers" type="Object" locid="10"> /// The set of instance fields, properties and methods to be made available on the class. /// </param> /// <param name="staticMembers" type="Object" locid="11"> /// The set of static fields, properties and methods to be made available on the class. /// </param> /// <returns type="Function" locid="12"> /// The newly defined class. /// </returns> if (baseClass) { constructor = constructor || function () { }; var basePrototype = baseClass.prototype; constructor.prototype = Object.create(basePrototype); Object.defineProperty(constructor.prototype, "_super", { value: basePrototype }); Object.defineProperty(constructor.prototype, "constructor", { value: constructor }); if (instanceMembers) { initializeProperties(constructor.prototype, instanceMembers); } if (staticMembers) { initializeProperties(constructor, staticMembers); } return constructor; } else { return define(constructor, instanceMembers, staticMembers); } } function mix(constructor) { /// <summary locid="15"> /// Defines a class using the given constructor and the union of the set of instance members /// specified by all the mixin objects. The mixin parameter list can be of variable length. /// </summary> /// <param name="constructor" locid="9"> /// A constructor function that will be used to instantiate this class. /// </param> /// <returns locid="12"> /// The newly defined class. /// </returns> constructor = constructor || function () { }; var i, len; for (i = 0, len = arguments.length; i < len; i++) { initializeProperties(constructor.prototype, arguments[i]); } return constructor; } // Establish members of "WinJS.Class" namespace WinJS.Namespace.define("WinJS.Class", { define: define, derive: derive, mix: mix }); })(WinJS); })(this);
/* © Microsoft. All rights reserved. This library is supported for use in Windows Tailored Apps only. Build: 6.2.8100.0 Version: 0.5 */ // Here are some inserted lines // with some extra comments (function (global, undefined) { "use strict"; var definedVariable = {}; definedVariable.prop = 5; function initializeProperties(target, members) { var keys = Object.keys(members); var properties; var i, len; for (i = 0, len = keys.length; i < len; i++) { var key = keys[i]; var enumerable = key.charCodeAt(0) !== /*_*/95; var member = members[key]; if (member && typeof member === 'object') { if (member.value !== undefined || typeof member.get === 'function' || typeof member.set === 'function') { if (member.enumerable === undefined) { member.enumerable = enumerable; } properties = properties || {}; properties[key] = member; continue; } } target[key] = member; } if (properties) { Object.defineProperties(target, properties); } } (function (rootNamespace) { // Create the rootNamespace in the global namespace if (!global[rootNamespace]) { global[rootNamespace] = Object.create(Object.prototype); } // Cache the rootNamespace we just created in a local variable var _rootNamespace = global[rootNamespace]; if (!_rootNamespace.Namespace) { _rootNamespace.Namespace = Object.create(Object.prototype); } function defineWithParent(parentNamespace, name, members) { /// <summary locid="1"> /// Defines a new namespace with the specified name, under the specified parent namespace. /// </summary> /// <param name="parentNamespace" type="Object" locid="2"> /// The parent namespace which will contain the new namespace. /// </param> /// <param name="name" type="String" locid="3"> /// Name of the new namespace. /// </param> /// <param name="members" type="Object" locid="4"> /// Members in the new namespace. /// </param> /// <returns locid="5"> /// The newly defined namespace. /// </returns> var currentNamespace = parentNamespace, namespaceFragments = name.split("."); for (var i = 0, len = namespaceFragments.length; i < len; i++) { var namespaceName = namespaceFragments[i]; if (!currentNamespace[namespaceName]) { Object.defineProperty(currentNamespace, namespaceName, { value: {}, writable: false, enumerable: true, configurable: true } ); } currentNamespace = currentNamespace[namespaceName]; } if (members) { initializeProperties(currentNamespace, members); } return currentNamespace; } function define(name, members) { /// <summary locid="6"> /// Defines a new namespace with the specified name. /// </summary> /// <param name="name" type="String" locid="7"> /// Name of the namespace. This could be a dot-separated nested name. /// </param> /// <param name="members" type="Object" locid="4"> /// Members in the new namespace. /// </param> /// <returns locid="5"> /// The newly defined namespace. /// </returns> return defineWithParent(global, name, members); } // Establish members of the "WinJS.Namespace" namespace Object.defineProperties(_rootNamespace.Namespace, { defineWithParent: { value: defineWithParent, writable: true, enumerable: true }, define: { value: define, writable: true, enumerable: true } }); })("WinJS"); (function (WinJS) { function define(constructor, instanceMembers, staticMembers) { /// <summary locid="8"> /// Defines a class using the given constructor and with the specified instance members. /// </summary> /// <param name="constructor" type="Function" locid="9"> /// A constructor function that will be used to instantiate this class. /// </param> /// <param name="instanceMembers" type="Object" locid="10"> /// The set of instance fields, properties and methods to be made available on the class. /// </param> /// <param name="staticMembers" type="Object" locid="11"> /// The set of static fields, properties and methods to be made available on the class. /// </param> /// <returns type="Function" locid="12"> /// The newly defined class. /// </returns> constructor = constructor || function () { }; if (instanceMembers) { initializeProperties(constructor.prototype, instanceMembers); } if (staticMembers) { initializeProperties(constructor, staticMembers); } return constructor; } function derive(baseClass, constructor, instanceMembers, staticMembers) { /// <summary locid="13"> /// Uses prototypal inheritance to create a sub-class based on the supplied baseClass parameter. /// </summary> /// <param name="baseClass" type="Function" locid="14"> /// The class to inherit from. /// </param> /// <param name="constructor" type="Function" locid="9"> /// A constructor function that will be used to instantiate this class. /// </param> /// <param name="instanceMembers" type="Object" locid="10"> /// The set of instance fields, properties and methods to be made available on the class. /// </param> /// <param name="staticMembers" type="Object" locid="11"> /// The set of static fields, properties and methods to be made available on the class. /// </param> /// <returns type="Function" locid="12"> /// The newly defined class. /// </returns> if (baseClass) { constructor = constructor || function () { }; var basePrototype = baseClass.prototype; constructor.prototype = Object.create(basePrototype); Object.defineProperty(constructor.prototype, "_super", { value: basePrototype }); Object.defineProperty(constructor.prototype, "constructor", { value: constructor }); if (instanceMembers) { initializeProperties(constructor.prototype, instanceMembers); } if (staticMembers) { initializeProperties(constructor, staticMembers); } return constructor; } else { return define(constructor, instanceMembers, staticMembers); } } function mix(constructor) { /// <summary locid="15"> /// Defines a class using the given constructor and the union of the set of instance members /// specified by all the mixin objects. The mixin parameter list can be of variable length. /// </summary> /// <param name="constructor" locid="9"> /// A constructor function that will be used to instantiate this class. /// </param> /// <returns locid="12"> /// The newly defined class. /// </returns> constructor = constructor || function () { }; var i, len; for (i = 0, len = arguments.length; i < len; i++) { initializeProperties(constructor.prototype, arguments[i]); } return constructor; } // Establish members of "WinJS.Class" namespace WinJS.Namespace.define("WinJS.Class", { define: define, derive: derive, mix: mix }); })(WinJS); })(this);
The Monaco Editor is the code editor that powers VS Code. A good page describing the code editor's features is here.
It is licensed under the MIT License and supports IE 11, Edge, Chrome, Firefox, Safari and Opera.
The Monaco editor is not supported in mobile browsers or mobile web frameworks.
Find more information at the Monaco Editor repo.
The latest released version is 0.19.0.
Download with this direct download link or from npm:
npm install monaco-editor@0.19.0
TypeScript, JavaScript, CSS, LESS, SCSS, JSON, HTML
XML, PHP, C#, C++, Razor, Markdown, Diff, Java, VB, CoffeeScript, Handlebars, Batch, Pug, F#, Lua, Powershell, Python, Ruby, SASS, R, Objective-C
Colorizers are implemented using Monarch.
Supports all languages out of the box