ソースを参照

Add a test page, simplify development setup

Alex Dima 8 年 前
コミット
68ba05ecd8
2 ファイル変更171 行追加19 行削除
  1. 8 19
      README.md
  2. 163 0
      test/index.html

+ 8 - 19
README.md

@@ -6,33 +6,22 @@ TypeScript and JavaScript language support for the Monaco Editor.
 
 ## Issues
 
-Please file issues concering `monaco-typescript` in the [`monaco-editor`-repository](https://github.com/Microsoft/monaco-editor/issues).
+Please file issues concering `monaco-typescript` in the [`monaco-editor` repository](https://github.com/Microsoft/monaco-editor/issues).
 
 ## Installing
 
 This npm module is bundled and distributed in the [monaco-editor](https://www.npmjs.com/package/monaco-editor) npm module.
 
-## Dev: cheat sheet
 
-* initial setup with `npm install .`
-* compile with `npm run watch`
-* test with `npm run test`
-* bundle with `npm run prepublish`
-
-## Dev: Running monaco-typescript from source
+## Development
 
-* clone https://github.com/Microsoft/monaco-typescript in `$/src/monaco-typescript`
-* run `$/src/monaco-typescript> npm run watch`
-* clone https://github.com/Microsoft/monaco-editor in `$/src/monaco-editor`
-* run `$/src/monaco-editor> npm run simpleserver`
-* open http://localhost:8080/monaco-editor/test/?monaco-typescript=dev
-
-### [Optional] Running monaco-editor-core from source
+* `git clone https://github.com/Microsoft/monaco-typescript`
+* `cd monaco-typescript`
+* `npm install .`
+* `npm run watch`
+* open `$/monaco-typescript/test/index.html` in your favorite browser.
+* test with `npm run test`
 
-* this is only needed when you want to make changes also in `monaco-editor-core`.
-* clone https://github.com/Microsoft/vscode in `$/src/vscode/`
-* run `$/src/vscode> gulp watch`
-* open http://localhost:8080/monaco-editor/test/?monaco-typescript=dev&editor=dev
 
 ## Code of Conduct
 

+ 163 - 0
test/index.html

@@ -0,0 +1,163 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<meta http-equiv="X-UA-Compatible" content="IE=edge" />
+	<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+	<link rel="stylesheet" data-name="vs/editor/editor.main" href="../node_modules/monaco-editor-core/dev/vs/editor/editor.main.css">
+</head>
+<body>
+
+<h2>Monaco Editor HTML test page</h2>
+<div id="container" style="width:800px;height:600px;border:1px solid grey"></div>
+
+<script>
+	var require = {
+		paths: {
+			'vs/language/typescript': '../out',
+			'vs': '../node_modules/monaco-editor-core/dev/vs'
+		}
+	};
+</script>
+<script src="../node_modules/monaco-editor-core/dev/vs/loader.js"></script>
+<script src="../node_modules/monaco-editor-core/dev/vs/editor/editor.main.nls.js"></script>
+<script src="../node_modules/monaco-editor-core/dev/vs/editor/editor.main.js"></script>
+
+<script>
+	require([
+		'vs/language/typescript/src/monaco.contribution'
+	], function() {
+		var editor = monaco.editor.create(document.getElementById('container'), {
+			value: [
+				'/* 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();',
+
+			].join('\n'),
+			language: 'typescript'
+		});
+	});
+</script>
+
+</body>
+</html>