From 7cce32996a684a95789177410a54f1de40de800a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=A2=E1=84=91=E1=85=B3=E1=86=AF=20=E1=84=82?= =?UTF-8?q?=E1=85=A9=E1=84=90=E1=85=B3=E1=84=87=E1=85=AE=E1=86=A8?= Date: Sat, 8 Dec 2018 17:38:46 +0900 Subject: [PATCH] Add: PhaserInputMaster plugin --- src/util/phaser-input-master/Gruntfile.js | 104 + src/util/phaser-input-master/LICENSE | 21 + src/util/phaser-input-master/README.md | 192 ++ .../build/phaser-input.d.ts | 162 ++ .../phaser-input-master/build/phaser-input.js | 720 ++++++ .../build/phaser-input.js.map | 1 + .../build/phaser-input.min.js | 10 + .../phaser-input-master/config/tsconfig.json | 11 + .../phaser-input-master/config/tslint.json | 131 ++ .../phaser-input-master/example/images/bg.png | Bin 0 -> 122607 bytes .../example/images/btn_clean.png | Bin 0 -> 3340 bytes .../example/images/inputfield.png | Bin 0 -> 1681 bytes .../phaser-input-master/example/index.html | 170 ++ .../phaser-input-master/package-lock.json | 1942 +++++++++++++++++ src/util/phaser-input-master/package.json | 37 + .../phaser-input-master/ts/InputElement.ts | 184 ++ src/util/phaser-input-master/ts/InputField.ts | 565 +++++ .../ts/Objects/InputBox.ts | 56 + .../ts/Objects/SelectionHighlight.ts | 25 + .../ts/Objects/TextMask.ts | 32 + src/util/phaser-input-master/ts/Plugin.ts | 53 + .../phaser-input-master/ts/definitions.d.ts | 2 + src/util/phaser-input-master/tslint.json | 131 ++ 23 files changed, 4549 insertions(+) create mode 100755 src/util/phaser-input-master/Gruntfile.js create mode 100755 src/util/phaser-input-master/LICENSE create mode 100755 src/util/phaser-input-master/README.md create mode 100755 src/util/phaser-input-master/build/phaser-input.d.ts create mode 100755 src/util/phaser-input-master/build/phaser-input.js create mode 100755 src/util/phaser-input-master/build/phaser-input.js.map create mode 100755 src/util/phaser-input-master/build/phaser-input.min.js create mode 100755 src/util/phaser-input-master/config/tsconfig.json create mode 100755 src/util/phaser-input-master/config/tslint.json create mode 100755 src/util/phaser-input-master/example/images/bg.png create mode 100755 src/util/phaser-input-master/example/images/btn_clean.png create mode 100755 src/util/phaser-input-master/example/images/inputfield.png create mode 100755 src/util/phaser-input-master/example/index.html create mode 100755 src/util/phaser-input-master/package-lock.json create mode 100755 src/util/phaser-input-master/package.json create mode 100755 src/util/phaser-input-master/ts/InputElement.ts create mode 100755 src/util/phaser-input-master/ts/InputField.ts create mode 100755 src/util/phaser-input-master/ts/Objects/InputBox.ts create mode 100755 src/util/phaser-input-master/ts/Objects/SelectionHighlight.ts create mode 100755 src/util/phaser-input-master/ts/Objects/TextMask.ts create mode 100755 src/util/phaser-input-master/ts/Plugin.ts create mode 100755 src/util/phaser-input-master/ts/definitions.d.ts create mode 100755 src/util/phaser-input-master/tslint.json diff --git a/src/util/phaser-input-master/Gruntfile.js b/src/util/phaser-input-master/Gruntfile.js new file mode 100755 index 0000000..272acc8 --- /dev/null +++ b/src/util/phaser-input-master/Gruntfile.js @@ -0,0 +1,104 @@ +module.exports = function (grunt) { + 'use strict'; + + grunt.initConfig({ + //Get some details from the package.json + pkg: grunt.file.readJSON('package.json'), + banner: '/*!\n' + + ' * <%= pkg.config.name %> - version <%= pkg.version %> \n' + + ' * <%= pkg.description %>\n' + + ' *\n' + + ' * <%= pkg.author %>\n' + + ' * Build at <%= grunt.template.today("dd-mm-yyyy") %>\n' + + ' * Released under MIT License \n' + + ' */\n', + usebanner: { + dist: { + options: { + position: 'top', + banner: '<%= banner %>' + }, + files: { + src: [ 'build/*.js' ] + } + } + }, + //Typescript settings per build + ts: { + options: { + module: 'amd', + target: 'es5', + sourceMap: true, + declaration: true, + noImplicitAny: true + }, + dist: { + src: ['ts/**/*.ts'], + dest: 'build/<%= pkg.config.name %>.js' + } + }, + watch: { + files: ['ts/**/*.ts'], + tasks: ['ts'], + options: { + livereload: true + } + }, + connect: { + server: { + options: { + base: ['./build', './example'], + port: 8080 + } + } + }, + uglify: { + options: { + compress: { + sequences: true, + dead_code: true, + conditionals: true, + booleans: true, + unused: true, + if_return: true, + join_vars: true, + drop_console: true + }, + mangle: true, + beautify: false + }, + dist: { + files: { + 'build/<%= pkg.config.name %>.min.js': [ + 'build/<%= pkg.config.name %>.js' + ] + } + } + }, + clean: { + dist: ['build'] + } + }); + + grunt.loadNpmTasks('grunt-contrib-clean'); + grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks('grunt-banner'); + grunt.loadNpmTasks('grunt-ts'); + grunt.loadNpmTasks('grunt-contrib-connect'); + grunt.loadNpmTasks('grunt-contrib-watch'); + + //dist Build + grunt.registerTask('dist', [ + 'clean:dist', //Clean the dist folder + 'ts:dist',//Run typescript on the preprocessed files, for dist (client) + 'uglify:dist', //Minify everything + 'usebanner:dist' //Minify everything + ]); + + grunt.registerTask('dev', [ + 'ts:dist', + 'connect', + 'watch' + ]); + +}; diff --git a/src/util/phaser-input-master/LICENSE b/src/util/phaser-input-master/LICENSE new file mode 100755 index 0000000..c297e70 --- /dev/null +++ b/src/util/phaser-input-master/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Orange Games + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/src/util/phaser-input-master/README.md b/src/util/phaser-input-master/README.md new file mode 100755 index 0000000..fc9dc04 --- /dev/null +++ b/src/util/phaser-input-master/README.md @@ -0,0 +1,192 @@ +Phaser Input +============ +Phaser Input is a plugin for Phaser that allows you to use html input fields as Phaser object inside your Phaser game. It fills the blanks of CanvasInput (that only works on a canvas renderer) and appends it with full Phaser support! +The best part is that it will also work on mobile devices! + +Key features: + +* Works on mobile and Desktop +* Included TypeScript support +* Also runs under WebGL renderer +* Pure Phaser implementation +* Easy configurable +* Production hardened + +*Imporant* +From here on this library will be published and updated under [@orange-games/phaser-input](https://www.npmjs.com/package/@orange-games/phaser-input) at NPM, the old [phaser-input](https://www.npmjs.com/package/phaser-input) will no longer be maintained. +If you are comming from v1 you can read the migration guide at the bottom + +Getting Started +--------------- +First you want to get a fresh copy of the plugin. You can get it from this repo or from npm, ain't that handy. +``` +npm install @orange-games/phaser-input --save-dev +``` + +Next up you'd want to add it to your list of js sources you load into your game +```html + +``` + +After adding the script to the page you can activate it by enabling the plugin: +```javascript +game.add.plugin(PhaserInput.Plugin); +``` + +Usage +----- +### Adding a InputField +The simplest way of adding a input field is: +```javascript +var input = game.add.inputField(10, 90); +``` + +Ofcourse there are options available that can be used to style the input. They can be passes as an object as the third parameter. + +```javascript +var password = game.add.inputField(10, 90, { + font: '18px Arial', + fill: '#212121', + fontWeight: 'bold', + width: 150, + padding: 8, + borderWidth: 1, + borderColor: '#000', + borderRadius: 6, + placeHolder: 'Password', + type: PhaserInput.InputType.password +}); +``` + +### Using zoom +Zooming is easy to enable on an input field, it can be passed to the InputField as a setting. But there are some caveats: + +First of all, it's only meant for mobile. Second; it modifies the scale and pivot of the world, and that might interfere with your resize. + +Also, when the keyboard is shown, sometimes a resize event will be triggered. + +Ideally you use a custom resize event, check for the static property `PhaserInput.KeyboardOpen` and don't resize when it's set to true. + +### Using keyboard open/close signals +Current version includes two event dispatchers that notify when a device keyboard is opened or closed. + +You can add listeners which trigger events based on this feedback. + +```javascript +PhaserInput.onKeyboardClose.addOnce(function() { + this.resizeBackgroundImage(); +}); +``` + +### Capture input events +By default, input event will not bubble up to other elements +This is controlled by an InputField property called `blockInput`. +When set to false, the input event will trigger on the input element and move up to other elements listening for the event. + +e.g. An in-game sprite might be listening for keyboard events (W, A, S, D). +If set to false, typing in input field will not trigger keyboard events for the sprite. +So the sprite will not move when typing into input field. + + +### Toggle Enter key +InputField has a property (`focusOutOnEnter`) that controls whether the input field will lose focus on pressing Enter. +If set to true, pressing enter will end focus on the field (default is true). + + +### Current Limitations + - Updates are slow when typing fast (type slower you!!) + - Zoom modifies the pivot and scale of the world, so it might interfere with some stuff + +## Properties + - **x**: number (0 by default) The X-coordinate in the game + - **y**: number (0 by default) The Y-coordinate in the game + - **fill**: string (#fff by default) The color of the inputted text + - **fillAlpha**: number (1 by default) Alpha of the textbox, 0 will hide the textbox and only show the text/placeholder/cursor + - **width**: number (150 by default) The width of the text box (just like in the DOM, padding, borders add onto this width) + - **height**: number (14 by default) The height of the text box (just like in the DOM, padding, borders add onto this height) + - **padding**: number (0 by default) The padding in pixels around all 4 sides of the text input area. + - **borderWidth**: number (1 by default) Size of the border + - **borderColor**: string (#000 by default) Color of the border + - **forceCase**: ForceCase (none by default) If we should force a certain case (either upper or lower) + - **borderRadius**: number (0 by default) Create rounded corners by setting a border radius + - **placeHolder**: string ('' by default) Text that will be shown before the user input's anything + - **placeHolderColor**: string (#bfbebd by default) The color of the placeholder text + - **type**: InputType (text by default) Either text, password or numeric + - **backgroundColor**: string (#fff by default) The background color of the input box + - **cursorColor**: string (#000 by default) The color of the blinking cursor + - **font**: string (14px Arial by default) The font that is used for the input box, covers the input text, placeholder and cursor + - **min**: string (none by default) The minimum number for the input field, only for number input fields + - **max**: string (none by default) The maximum number for the number input field, or the maxLength for other input fields + - **selectionColor**: string (rgba(179, 212, 253, 0.8) by default) The default color for the text selection highlight. + - **zoom**: boolean (false by default) if we need to zoom onto the input field (mobile only). + +### Browser Support +Tested on: + - Desktop + * Chrome 48+ + * FireFox 44+ + * Safari 9+ + - Mobile + * Chrome 48+ + * iOS 9+ + +Migrating from v1 +----------------- +the API of the objects is the same as before but the namespace changed. We decided to remove the Fabrique namespace, and house the plugin in it's own (PhaserInput). +so: +Fabrique.Plugins.Input +becomes: +PhaserInput.Plugin + +and all other references of Fabrique.Plugins can be replaced with PhaserInput. +If you are still unsure how or what, both the example and this readme have been adjusted to work with the new namespace. + +FAQ +--- +### I Don't see the cursor blinking! +This is most likely due to you adding the input field to a custom Phaser object. According to the [Phaser docs](http://phaser.io/docs/2.6.2/Phaser.Sprite.html#update) the update function needs to be called manually in these cases. + +So add the following to your object and the cursor should work :) + +```javascript +update: function () { + this._inputField.update(); +}, +``` + +### How do I focus on the element?! +Normally the element is only focused trough user interaction (due to mobile limitations) you can get around this by manually calling the focus method yourself: +```javascript +var input = game.add.inputField(10, 90); +//start with focus on the element +input.startFocus(); + +//and then end the focus +input.endFocus(); +``` +Please note that this will not work on mobile wihtout a user interaction + +### Can I change the width later on in the code? +Well thanks for asking, yes you can! +```javascript +var input = game.add.inputField(10, 90); +input.width = 200; +``` + +### Well then, is it also possible to set the value in code? +Yes you can! The Inputfield has a setText function you can call to set any value you want! +```javascript +var input = game.add.inputField(10, 90); +input.setText("My custom text"); +``` + +Credits +------- +phaser-input is inspired by [CanvasInput](https://github.com/goldfire/CanvasInput) + +Disclaimer +---------- +We at OrangeGames just love playing and creating awesome games. We aren't affiliated with Phaser.io. We just needed some awesome input boxes in our awesome HTML5 games. Feel free to use it for enhancing your own awesome games! + +Phaser Input is distributed under the MIT license. All 3rd party libraries and components are distributed under their +respective license terms. diff --git a/src/util/phaser-input-master/build/phaser-input.d.ts b/src/util/phaser-input-master/build/phaser-input.d.ts new file mode 100755 index 0000000..50e3ed0 --- /dev/null +++ b/src/util/phaser-input-master/build/phaser-input.d.ts @@ -0,0 +1,162 @@ +declare module PhaserInput { + enum InputType { + text = 0, + password = 1, + number = 2, + } + class InputElement { + private element; + private keyUpCallback; + private inputChangeCallback; + private type; + private id; + private game; + private focusIn; + private focusOut; + constructor(game: Phaser.Game, id: string, type?: InputType, value?: string, focusIn?: Phaser.Signal, focusOut?: Phaser.Signal); + addKeyUpListener(callback: () => void): void; + blockKeyDownEvents(): void; + private preventKeyPropagation(evt); + unblockKeyDownEvents(): void; + removeEventListener(): void; + destroy(): void; + setMax(max: string, min?: string): void; + value: string; + focus(): void; + blur(): void; + readonly hasSelection: boolean; + readonly caretStart: number; + readonly caretEnd: number; + getCaretPosition(): number; + setCaretPosition(pos: number): void; + } +} +declare module PhaserInput { + enum ForceCase { + none = 0, + lower = 1, + upper = 2, + } + interface InputOptions extends Phaser.PhaserTextStyle { + x?: number; + y?: number; + placeHolder?: string; + fillAlpha?: number; + width?: number; + height?: number; + padding?: number; + borderWidth?: number; + borderColor?: string; + borderRadius?: number; + cursorColor?: string; + placeHolderColor?: string; + type?: InputType; + forceCase?: ForceCase; + min?: string; + max?: string; + textAlign?: string; + selectionColor?: string; + zoom?: boolean; + } + class InputField extends Phaser.Sprite { + focusOutOnEnter: boolean; + private placeHolder; + private box; + private textMask; + private focus; + private cursor; + private text; + private offscreenText; + value: string; + private inputOptions; + private domElement; + private selection; + private windowScale; + blockInput: boolean; + focusIn: Phaser.Signal; + focusOut: Phaser.Signal; + width: number; + constructor(game: Phaser.Game, x: number, y: number, inputOptions?: InputOptions); + private updateTextAlignment(); + private checkDown(e); + private blink; + private cnt; + update(): number; + endFocus(): void; + startFocus(): void; + private keyUpProcessor(); + private updateText(); + private updateCursor(); + private getCaretPosition(); + private setCaretOnclick(e); + private updateSelection(); + private zoomIn(); + private zoomOut(); + private keyListener(evt); + destroy(destroyChildren?: boolean): void; + resetText(): void; + setText(text?: string): void; + private getFormattedText(text); + } +} +declare module PhaserInput { + class InputBox extends Phaser.Graphics { + private bgColor; + private borderRadius; + private borderColor; + private borderWidth; + private boxAlpha; + private boxHeight; + private padding; + private boxWidth; + constructor(game: Phaser.Game, inputOptions: InputOptions); + resize(newWidth: number): void; + private drawBox(); + } +} +declare module PhaserInput { + class SelectionHighlight extends Phaser.Graphics { + private inputOptions; + constructor(game: Phaser.Game, inputOptions: InputOptions); + updateSelection(rect: PIXI.Rectangle): void; + static rgb2hex(color: { + r: number; + g: number; + b: number; + a: number; + }): number; + } +} +declare module PhaserInput { + class TextMask extends Phaser.Graphics { + private maskWidth; + private maskHeight; + constructor(game: Phaser.Game, inputOptions: InputOptions); + resize(newWidth: number): void; + private drawMask(); + } +} +declare module PhaserInput { + var Zoomed: boolean; + var KeyboardOpen: boolean; + const onKeyboardOpen: Phaser.Signal; + const onKeyboardClose: Phaser.Signal; + interface InputFieldObjectFactory extends Phaser.GameObjectFactory { + inputField: (x: number, y: number, inputOptions?: PhaserInput.InputOptions, group?: Phaser.Group) => PhaserInput.InputField; + } + interface InputFieldObjectCreator extends Phaser.GameObjectCreator { + inputField: (x: number, y: number, inputOptions?: PhaserInput.InputOptions) => PhaserInput.InputField; + } + interface InputFieldGame extends Phaser.Game { + add: InputFieldObjectFactory; + make: InputFieldObjectCreator; + } + class Plugin extends Phaser.Plugin { + static Zoomed: boolean; + static KeyboardOpen: boolean; + static onKeyboardOpen: Phaser.Signal; + static onKeyboardClose: Phaser.Signal; + constructor(game: Phaser.Game, parent: Phaser.PluginManager); + private addInputFieldFactory(); + } +} diff --git a/src/util/phaser-input-master/build/phaser-input.js b/src/util/phaser-input-master/build/phaser-input.js new file mode 100755 index 0000000..1ff8d1f --- /dev/null +++ b/src/util/phaser-input-master/build/phaser-input.js @@ -0,0 +1,720 @@ +/*! + * phaser-input - version 2.0.5 + * Adds input boxes to Phaser like CanvasInput, but also works for WebGL and Mobile, made for Phaser only. + * + * OrangeGames + * Build at 02-06-2017 + * Released under MIT License + */ + +var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +var PhaserInput; +(function (PhaserInput) { + var InputType; + (function (InputType) { + InputType[InputType["text"] = 0] = "text"; + InputType[InputType["password"] = 1] = "password"; + InputType[InputType["number"] = 2] = "number"; + })(InputType = PhaserInput.InputType || (PhaserInput.InputType = {})); + var InputElement = (function () { + function InputElement(game, id, type, value, focusIn, focusOut) { + if (type === void 0) { type = InputType.text; } + if (value === void 0) { value = ''; } + var _this = this; + this.id = id; + this.type = type; + this.game = game; + this.focusIn = focusIn; + this.focusOut = focusOut; + var canvasTopX = this.game.canvas.getBoundingClientRect().top + document.body.scrollTop; + this.element = document.createElement('input'); + this.element.id = id; + this.element.style.position = 'absolute'; + this.element.style.top = canvasTopX + 'px'; + this.element.style.left = (-40).toString() + 'px'; + this.element.style.width = (10).toString() + 'px'; + this.element.style.height = (10).toString() + 'px'; + this.element.style.border = '0px'; + this.element.value = this.value; + this.element.type = InputType[type]; + this.element.addEventListener('focusin', function () { + if (_this.focusIn instanceof Phaser.Signal) { + _this.focusIn.dispatch(); + } + }); + this.element.addEventListener('focusout', function () { + if (_this.focusOut instanceof Phaser.Signal) { + _this.focusOut.dispatch(); + } + }); + document.body.appendChild(this.element); + } + InputElement.prototype.addKeyUpListener = function (callback) { + this.keyUpCallback = callback; + document.addEventListener('keyup', this.keyUpCallback); + this.element.addEventListener('input', this.keyUpCallback); + }; + InputElement.prototype.blockKeyDownEvents = function () { + document.addEventListener('keydown', this.preventKeyPropagation); + }; + InputElement.prototype.preventKeyPropagation = function (evt) { + if (evt.stopPropagation) { + evt.stopPropagation(); + } + else { + event.cancelBubble = true; + } + }; + InputElement.prototype.unblockKeyDownEvents = function () { + document.removeEventListener('keydown', this.preventKeyPropagation); + }; + InputElement.prototype.removeEventListener = function () { + document.removeEventListener('keyup', this.keyUpCallback); + this.element.removeEventListener('input', this.keyUpCallback); + }; + InputElement.prototype.destroy = function () { + document.body.removeChild(this.element); + }; + InputElement.prototype.setMax = function (max, min) { + if (max === undefined) { + return; + } + if (this.type === InputType.text || this.type === InputType.password) { + this.element.maxLength = parseInt(max, 10); + } + else if (this.type === InputType.number) { + this.element.max = max; + if (min === undefined) { + return; + } + this.element.min = min; + } + }; + Object.defineProperty(InputElement.prototype, "value", { + get: function () { + return this.element.value; + }, + set: function (value) { + this.element.value = value; + }, + enumerable: true, + configurable: true + }); + InputElement.prototype.focus = function () { + var _this = this; + this.element.focus(); + if (!this.game.device.desktop && this.game.device.chrome) { + var originalWidth_1 = window.innerWidth, originalHeight_1 = window.innerHeight; + var kbAppeared_1 = false; + var interval_1 = setInterval(function () { + if (originalWidth_1 > window.innerWidth || originalHeight_1 > window.innerHeight) { + kbAppeared_1 = true; + } + if (kbAppeared_1 && originalWidth_1 === window.innerWidth && originalHeight_1 === window.innerHeight) { + if (_this.focusOut instanceof Phaser.Signal) { + _this.focusOut.dispatch(); + } + clearInterval(interval_1); + } + }, 50); + } + }; + InputElement.prototype.blur = function () { + this.element.blur(); + }; + Object.defineProperty(InputElement.prototype, "hasSelection", { + get: function () { + if (this.type === InputType.number) { + return false; + } + return this.element.selectionStart !== this.element.selectionEnd; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(InputElement.prototype, "caretStart", { + get: function () { + return this.element.selectionEnd; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(InputElement.prototype, "caretEnd", { + get: function () { + return this.element.selectionStart; + }, + enumerable: true, + configurable: true + }); + InputElement.prototype.getCaretPosition = function () { + if (this.type === InputType.number) { + return -1; + } + return this.element.selectionStart; + }; + InputElement.prototype.setCaretPosition = function (pos) { + if (this.type === InputType.number) { + return; + } + this.element.setSelectionRange(pos, pos); + }; + return InputElement; + }()); + PhaserInput.InputElement = InputElement; +})(PhaserInput || (PhaserInput = {})); +var PhaserInput; +(function (PhaserInput) { + var ForceCase; + (function (ForceCase) { + ForceCase[ForceCase["none"] = 0] = "none"; + ForceCase[ForceCase["lower"] = 1] = "lower"; + ForceCase[ForceCase["upper"] = 2] = "upper"; + })(ForceCase = PhaserInput.ForceCase || (PhaserInput.ForceCase = {})); + var InputField = (function (_super) { + __extends(InputField, _super); + function InputField(game, x, y, inputOptions) { + if (inputOptions === void 0) { inputOptions = {}; } + var _this = _super.call(this, game, x, y) || this; + _this.focusOutOnEnter = true; + _this.placeHolder = null; + _this.box = null; + _this.focus = false; + _this.value = ''; + _this.windowScale = 1; + _this.blockInput = true; + _this.focusIn = new Phaser.Signal(); + _this.focusOut = new Phaser.Signal(); + _this.blink = true; + _this.cnt = 0; + _this.inputOptions = inputOptions; + _this.inputOptions.width = (typeof inputOptions.width === 'number') ? inputOptions.width : 150; + _this.inputOptions.padding = (typeof inputOptions.padding === 'number') ? inputOptions.padding : 0; + _this.inputOptions.textAlign = inputOptions.textAlign || 'left'; + _this.inputOptions.type = inputOptions.type || PhaserInput.InputType.text; + _this.inputOptions.forceCase = (inputOptions.forceCase) ? inputOptions.forceCase : ForceCase.none; + _this.inputOptions.borderRadius = (typeof inputOptions.borderRadius === 'number') ? inputOptions.borderRadius : 0; + _this.inputOptions.height = (typeof inputOptions.height === 'number') ? inputOptions.height : 14; + _this.inputOptions.fillAlpha = (inputOptions.fillAlpha === undefined) ? 1 : inputOptions.fillAlpha; + _this.inputOptions.selectionColor = inputOptions.selectionColor || 'rgba(179, 212, 253, 0.8)'; + _this.inputOptions.zoom = (!game.device.desktop) ? inputOptions.zoom || false : false; + _this.box = new PhaserInput.InputBox(_this.game, inputOptions); + _this.setTexture(_this.box.generateTexture()); + _this.textMask = new PhaserInput.TextMask(_this.game, inputOptions); + _this.addChild(_this.textMask); + _this.domElement = new PhaserInput.InputElement(_this.game, 'phaser-input-' + (Math.random() * 10000 | 0).toString(), _this.inputOptions.type, _this.value, _this.focusIn, _this.focusOut); + _this.domElement.setMax(_this.inputOptions.max, _this.inputOptions.min); + _this.selection = new PhaserInput.SelectionHighlight(_this.game, _this.inputOptions); + _this.selection.mask = _this.textMask; + _this.addChild(_this.selection); + if (inputOptions.placeHolder && inputOptions.placeHolder.length > 0) { + _this.placeHolder = new Phaser.Text(game, _this.inputOptions.padding, _this.inputOptions.padding, inputOptions.placeHolder, { + font: inputOptions.font || '14px Arial', + fontWeight: inputOptions.fontWeight || 'normal', + fill: inputOptions.placeHolderColor || '#bfbebd' + }); + _this.placeHolder.mask = _this.textMask; + _this.addChild(_this.placeHolder); + } + _this.cursor = new Phaser.Text(game, _this.inputOptions.padding, _this.inputOptions.padding - 2, '|', { + font: inputOptions.font || '14px Arial', + fontWeight: inputOptions.fontWeight || 'normal', + fill: inputOptions.cursorColor || '#000000' + }); + _this.cursor.visible = false; + _this.addChild(_this.cursor); + _this.text = new Phaser.Text(game, _this.inputOptions.padding, _this.inputOptions.padding, '', { + font: inputOptions.font || '14px Arial', + fontWeight: inputOptions.fontWeight || 'normal', + fill: inputOptions.fill || '#000000' + }); + _this.text.mask = _this.textMask; + _this.addChild(_this.text); + _this.offscreenText = new Phaser.Text(game, _this.inputOptions.padding, _this.inputOptions.padding, '', { + font: inputOptions.font || '14px Arial', + fontWeight: inputOptions.fontWeight || 'normal', + fill: inputOptions.fill || '#000000' + }); + _this.updateTextAlignment(); + _this.inputEnabled = true; + _this.input.useHandCursor = true; + _this.game.input.onDown.add(_this.checkDown, _this); + _this.focusOut.add(function () { + if (PhaserInput.KeyboardOpen) { + _this.endFocus(); + if (_this.inputOptions.zoom) { + _this.zoomOut(); + } + } + }); + return _this; + } + Object.defineProperty(InputField.prototype, "width", { + get: function () { + return this.inputOptions.width; + }, + set: function (width) { + this.inputOptions.width = width; + this.box.resize(width); + this.textMask.resize(width); + this.updateTextAlignment(); + }, + enumerable: true, + configurable: true + }); + InputField.prototype.updateTextAlignment = function () { + switch (this.inputOptions.textAlign) { + case 'left': + this.text.anchor.set(0, 0); + this.text.x = this.inputOptions.padding; + if (null !== this.placeHolder) { + this.placeHolder.anchor.set(0, 0); + } + this.cursor.x = this.inputOptions.padding + this.getCaretPosition(); + break; + case 'center': + this.text.anchor.set(0.5, 0); + this.text.x = this.inputOptions.padding + this.inputOptions.width / 2; + if (null !== this.placeHolder) { + this.placeHolder.anchor.set(0.5, 0); + this.placeHolder.x = this.inputOptions.padding + this.inputOptions.width / 2; + } + this.cursor.x = this.inputOptions.padding + this.inputOptions.width / 2 - this.text.width / 2 + this.getCaretPosition(); + break; + case 'right': + this.text.anchor.set(1, 0); + this.text.x = this.inputOptions.padding + this.inputOptions.width; + if (null !== this.placeHolder) { + this.placeHolder.anchor.set(1, 0); + this.placeHolder.x = this.inputOptions.padding + this.inputOptions.width; + } + this.cursor.x = this.inputOptions.padding + this.inputOptions.width; + break; + } + }; + InputField.prototype.checkDown = function (e) { + if (!this.value) { + this.resetText(); + } + if (this.input.checkPointerOver(e)) { + if (this.focus) { + this.setCaretOnclick(e); + return; + } + if (this.inputOptions.zoom && !PhaserInput.Zoomed) { + this.zoomIn(); + } + this.startFocus(); + } + else { + if (this.focus === true) { + this.endFocus(); + if (this.inputOptions.zoom) { + this.zoomOut(); + } + } + } + }; + InputField.prototype.update = function () { + this.text.update(); + if (this.placeHolder) { + this.placeHolder.update(); + } + if (!this.focus) { + return; + } + if (this.cnt !== 30) { + return this.cnt++; + } + this.cursor.visible = this.blink; + this.blink = !this.blink; + this.cnt = 0; + }; + InputField.prototype.endFocus = function () { + var _this = this; + if (!this.focus) { + return; + } + this.domElement.removeEventListener(); + if (this.blockInput === true) { + this.domElement.unblockKeyDownEvents(); + } + this.focus = false; + if (this.value.length === 0 && null !== this.placeHolder) { + this.placeHolder.visible = true; + } + this.cursor.visible = false; + if (this.game.device.desktop) { + setTimeout(function () { + _this.domElement.blur(); + }, 0); + } + else { + this.domElement.blur(); + } + if (!this.game.device.desktop) { + PhaserInput.KeyboardOpen = false; + PhaserInput.onKeyboardClose.dispatch(); + } + }; + InputField.prototype.startFocus = function () { + var _this = this; + this.focus = true; + if (null !== this.placeHolder) { + this.placeHolder.visible = false; + } + if (this.game.device.desktop) { + setTimeout(function () { + _this.keyUpProcessor(); + }, 0); + } + else { + this.keyUpProcessor(); + } + if (!this.game.device.desktop) { + PhaserInput.KeyboardOpen = true; + PhaserInput.onKeyboardOpen.dispatch(); + } + }; + InputField.prototype.keyUpProcessor = function () { + this.domElement.addKeyUpListener(this.keyListener.bind(this)); + this.domElement.focus(); + if (this.blockInput === true) { + this.domElement.blockKeyDownEvents(); + } + }; + InputField.prototype.updateText = function () { + var text = ''; + if (this.inputOptions.type === PhaserInput.InputType.password) { + for (var i = 0; i < this.value.length; i++) { + text += '*'; + } + } + else if (this.inputOptions.type === PhaserInput.InputType.number) { + var val = parseInt(this.value); + if (val < parseInt(this.inputOptions.min)) { + text = this.value = this.domElement.value = this.inputOptions.min; + } + else if (val > parseInt(this.inputOptions.max)) { + text = this.value = this.domElement.value = this.inputOptions.max; + } + else { + text = this.value; + } + } + else { + text = this.value; + } + this.text.setText(text); + if (this.text.width > this.inputOptions.width) { + this.text.anchor.x = 1; + this.text.x = this.inputOptions.padding + this.inputOptions.width; + } + else { + switch (this.inputOptions.textAlign) { + case 'left': + this.text.anchor.set(0, 0); + this.text.x = this.inputOptions.padding; + break; + case 'center': + this.text.anchor.set(0.5, 0); + this.text.x = this.inputOptions.padding + this.inputOptions.width / 2; + break; + case 'right': + this.text.anchor.set(1, 0); + this.text.x = this.inputOptions.padding + this.inputOptions.width; + break; + } + } + }; + InputField.prototype.updateCursor = function () { + if (this.text.width > this.inputOptions.width || this.inputOptions.textAlign === 'right') { + this.cursor.x = this.inputOptions.padding + this.inputOptions.width; + } + else { + switch (this.inputOptions.textAlign) { + case 'left': + this.cursor.x = this.inputOptions.padding + this.getCaretPosition(); + break; + case 'center': + this.cursor.x = this.inputOptions.padding + this.inputOptions.width / 2 - this.text.width / 2 + this.getCaretPosition(); + break; + } + } + }; + InputField.prototype.getCaretPosition = function () { + var caretPosition = this.domElement.getCaretPosition(); + if (-1 === caretPosition) { + return this.text.width; + } + var text = this.value; + if (this.inputOptions.type === PhaserInput.InputType.password) { + text = ''; + for (var i = 0; i < this.value.length; i++) { + text += '*'; + } + } + this.offscreenText.setText(text.slice(0, caretPosition)); + return this.offscreenText.width; + }; + InputField.prototype.setCaretOnclick = function (e) { + var localX = (this.text.toLocal(new PIXI.Point(e.x, e.y), this.game.world)).x; + if (this.inputOptions.textAlign && this.inputOptions.textAlign === 'center') { + localX += this.text.width / 2; + } + var characterWidth = this.text.width / this.value.length; + var index = 0; + for (var i = 0; i < this.value.length; i++) { + if (localX >= i * characterWidth && localX <= (i + 1) * characterWidth) { + index = i; + break; + } + } + if (localX > (this.value.length - 1) * characterWidth) { + index = this.value.length; + } + this.startFocus(); + this.domElement.setCaretPosition(index); + this.updateCursor(); + }; + InputField.prototype.updateSelection = function () { + if (this.domElement.hasSelection) { + var text = this.value; + if (this.inputOptions.type === PhaserInput.InputType.password) { + text = ''; + for (var i = 0; i < this.value.length; i++) { + text += '*'; + } + } + text = text.substring(this.domElement.caretStart, this.domElement.caretEnd); + this.offscreenText.setText(text); + this.selection.updateSelection(this.offscreenText.getBounds()); + switch (this.inputOptions.textAlign) { + case 'left': + this.selection.x = this.inputOptions.padding; + break; + case 'center': + this.selection.x = this.inputOptions.padding + this.inputOptions.width / 2 - this.text.width / 2; + break; + } + } + else { + this.selection.clear(); + } + }; + InputField.prototype.zoomIn = function () { + if (PhaserInput.Zoomed) { + return; + } + var bounds = this.getBounds(); + if (window.innerHeight > window.innerWidth) { + this.windowScale = this.game.width / (bounds.width * 1.5); + } + else { + this.windowScale = (this.game.width / 2) / (bounds.width * 1.5); + } + var offsetX = ((this.game.width - bounds.width * 1.5) / 2) / this.windowScale; + this.game.world.scale.set(this.game.world.scale.x * this.windowScale, this.game.world.scale.y * this.windowScale); + this.game.world.pivot.set(bounds.x - offsetX, bounds.y - this.inputOptions.padding * 2); + PhaserInput.Zoomed = true; + }; + InputField.prototype.zoomOut = function () { + if (!PhaserInput.Zoomed) { + return; + } + this.game.world.scale.set(this.game.world.scale.x / this.windowScale, this.game.world.scale.y / this.windowScale); + this.game.world.pivot.set(0, 0); + PhaserInput.Zoomed = false; + }; + InputField.prototype.keyListener = function (evt) { + this.value = this.getFormattedText(this.domElement.value); + if (evt.keyCode === 13) { + if (this.focusOutOnEnter) { + this.endFocus(); + } + return; + } + this.updateText(); + this.updateCursor(); + this.updateSelection(); + evt.preventDefault(); + }; + InputField.prototype.destroy = function (destroyChildren) { + this.game.input.onDown.remove(this.checkDown, this); + this.focusIn.removeAll(); + this.focusOut.removeAll(); + this.domElement.destroy(); + _super.prototype.destroy.call(this, destroyChildren); + }; + InputField.prototype.resetText = function () { + this.setText(); + }; + InputField.prototype.setText = function (text) { + if (text === void 0) { text = ''; } + if (null !== this.placeHolder) { + if (text.length > 0) { + this.placeHolder.visible = false; + } + else { + this.placeHolder.visible = true; + } + } + this.value = this.getFormattedText(text); + this.domElement.value = this.value; + this.updateText(); + this.updateCursor(); + this.endFocus(); + }; + InputField.prototype.getFormattedText = function (text) { + switch (this.inputOptions.forceCase) { + default: + case ForceCase.none: + return text; + case ForceCase.lower: + return text.toLowerCase(); + case ForceCase.upper: + return text.toUpperCase(); + } + }; + return InputField; + }(Phaser.Sprite)); + PhaserInput.InputField = InputField; +})(PhaserInput || (PhaserInput = {})); +var PhaserInput; +(function (PhaserInput) { + var InputBox = (function (_super) { + __extends(InputBox, _super); + function InputBox(game, inputOptions) { + var _this = _super.call(this, game, 0, 0) || this; + _this.bgColor = (inputOptions.backgroundColor) ? parseInt(inputOptions.backgroundColor.slice(1), 16) : 0xffffff; + _this.borderRadius = inputOptions.borderRadius || 0; + _this.borderWidth = inputOptions.borderWidth || 1; + _this.borderColor = (inputOptions.borderColor) ? parseInt(inputOptions.borderColor.slice(1), 16) : 0x959595; + _this.boxAlpha = inputOptions.fillAlpha; + _this.padding = inputOptions.padding; + var height = inputOptions.height; + var width = inputOptions.width; + var height; + if (inputOptions.font) { + height = Math.max(parseInt(inputOptions.font.substr(0, inputOptions.font.indexOf('px')), 10), height); + } + _this.boxHeight = _this.padding * 2 + height; + var width = inputOptions.width; + _this.boxWidth = _this.padding * 2 + width; + _this.drawBox(); + return _this; + } + InputBox.prototype.resize = function (newWidth) { + this.boxWidth = this.padding * 2 + newWidth; + this.drawBox(); + }; + InputBox.prototype.drawBox = function () { + this.clear() + .beginFill(this.bgColor, this.boxAlpha) + .lineStyle(this.borderWidth, this.borderColor, this.boxAlpha); + if (this.borderRadius > 0) { + this.drawRoundedRect(0, 0, this.boxWidth, this.boxHeight, this.borderRadius); + } + else { + this.drawRect(0, 0, this.boxWidth, this.boxHeight); + } + }; + return InputBox; + }(Phaser.Graphics)); + PhaserInput.InputBox = InputBox; +})(PhaserInput || (PhaserInput = {})); +var PhaserInput; +(function (PhaserInput) { + var SelectionHighlight = (function (_super) { + __extends(SelectionHighlight, _super); + function SelectionHighlight(game, inputOptions) { + var _this = _super.call(this, game, inputOptions.padding, inputOptions.padding) || this; + _this.inputOptions = inputOptions; + return _this; + } + SelectionHighlight.prototype.updateSelection = function (rect) { + var color = Phaser.Color.webToColor(this.inputOptions.selectionColor); + this.clear(); + this.beginFill(SelectionHighlight.rgb2hex(color), color.a); + this.drawRect(rect.x, rect.y, rect.width, rect.height - this.inputOptions.padding); + }; + SelectionHighlight.rgb2hex = function (color) { + return parseInt(("0" + color.r.toString(16)).slice(-2) + + ("0" + color.g.toString(16)).slice(-2) + + ("0" + color.b.toString(16)).slice(-2), 16); + }; + return SelectionHighlight; + }(Phaser.Graphics)); + PhaserInput.SelectionHighlight = SelectionHighlight; +})(PhaserInput || (PhaserInput = {})); +var PhaserInput; +(function (PhaserInput) { + var TextMask = (function (_super) { + __extends(TextMask, _super); + function TextMask(game, inputOptions) { + var _this = _super.call(this, game, inputOptions.padding, inputOptions.padding) || this; + var height = inputOptions.height; + if (inputOptions.font) { + height = Math.max(parseInt(inputOptions.font.substr(0, inputOptions.font.indexOf('px')), 10), height); + } + _this.maskWidth = inputOptions.width; + _this.maskHeight = height * 1.3; + _this.drawMask(); + return _this; + } + TextMask.prototype.resize = function (newWidth) { + this.maskWidth = newWidth; + this.drawMask(); + }; + TextMask.prototype.drawMask = function () { + this.clear() + .beginFill(0x000000) + .drawRect(0, 0, this.maskWidth, this.maskHeight) + .endFill(); + }; + return TextMask; + }(Phaser.Graphics)); + PhaserInput.TextMask = TextMask; +})(PhaserInput || (PhaserInput = {})); +var PhaserInput; +(function (PhaserInput) { + PhaserInput.Zoomed = false; + PhaserInput.KeyboardOpen = false; + PhaserInput.onKeyboardOpen = new Phaser.Signal(); + PhaserInput.onKeyboardClose = new Phaser.Signal(); + var Plugin = (function (_super) { + __extends(Plugin, _super); + function Plugin(game, parent) { + var _this = _super.call(this, game, parent) || this; + _this.addInputFieldFactory(); + return _this; + } + Plugin.prototype.addInputFieldFactory = function () { + Phaser.GameObjectFactory.prototype.inputField = function (x, y, inputOptions, group) { + if (group === undefined) { + group = this.world; + } + var nineSliceObject = new PhaserInput.InputField(this.game, x, y, inputOptions); + return group.add(nineSliceObject); + }; + Phaser.GameObjectCreator.prototype.inputField = function (x, y, inputOptions) { + return new PhaserInput.InputField(this.game, x, y, inputOptions); + }; + }; + return Plugin; + }(Phaser.Plugin)); + Plugin.Zoomed = false; + Plugin.KeyboardOpen = false; + Plugin.onKeyboardOpen = new Phaser.Signal(); + Plugin.onKeyboardClose = new Phaser.Signal(); + PhaserInput.Plugin = Plugin; +})(PhaserInput || (PhaserInput = {})); +//# sourceMappingURL=phaser-input.js.map \ No newline at end of file diff --git a/src/util/phaser-input-master/build/phaser-input.js.map b/src/util/phaser-input-master/build/phaser-input.js.map new file mode 100755 index 0000000..0fd4d1e --- /dev/null +++ b/src/util/phaser-input-master/build/phaser-input.js.map @@ -0,0 +1 @@ +{"version":3,"file":"phaser-input.js","sourceRoot":"","sources":["../ts/InputElement.ts","../ts/InputField.ts","../ts/Objects/InputBox.ts","../ts/Objects/SelectionHighlight.ts","../ts/Objects/TextMask.ts","../ts/Plugin.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/util/phaser-input-master/build/phaser-input.min.js b/src/util/phaser-input-master/build/phaser-input.min.js new file mode 100755 index 0000000..a44a0ff --- /dev/null +++ b/src/util/phaser-input-master/build/phaser-input.min.js @@ -0,0 +1,10 @@ +/*! + * phaser-input - version 2.0.5 + * Adds input boxes to Phaser like CanvasInput, but also works for WebGL and Mobile, made for Phaser only. + * + * OrangeGames + * Build at 02-06-2017 + * Released under MIT License + */ + +var __extends=this&&this.__extends||function(){var a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,b){a.__proto__=b}||function(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])};return function(b,c){function d(){this.constructor=b}a(b,c),b.prototype=null===c?Object.create(c):(d.prototype=c.prototype,new d)}}(),PhaserInput;!function(a){var b;!function(a){a[a.text=0]="text",a[a.password=1]="password",a[a.number=2]="number"}(b=a.InputType||(a.InputType={}));var c=function(){function a(a,c,d,e,f,g){void 0===d&&(d=b.text),void 0===e&&(e="");var h=this;this.id=c,this.type=d,this.game=a,this.focusIn=f,this.focusOut=g;var i=this.game.canvas.getBoundingClientRect().top+document.body.scrollTop;this.element=document.createElement("input"),this.element.id=c,this.element.style.position="absolute",this.element.style.top=i+"px",this.element.style.left=(-40).toString()+"px",this.element.style.width=10..toString()+"px",this.element.style.height=10..toString()+"px",this.element.style.border="0px",this.element.value=this.value,this.element.type=b[d],this.element.addEventListener("focusin",function(){h.focusIn instanceof Phaser.Signal&&h.focusIn.dispatch()}),this.element.addEventListener("focusout",function(){h.focusOut instanceof Phaser.Signal&&h.focusOut.dispatch()}),document.body.appendChild(this.element)}return a.prototype.addKeyUpListener=function(a){this.keyUpCallback=a,document.addEventListener("keyup",this.keyUpCallback),this.element.addEventListener("input",this.keyUpCallback)},a.prototype.blockKeyDownEvents=function(){document.addEventListener("keydown",this.preventKeyPropagation)},a.prototype.preventKeyPropagation=function(a){a.stopPropagation?a.stopPropagation():event.cancelBubble=!0},a.prototype.unblockKeyDownEvents=function(){document.removeEventListener("keydown",this.preventKeyPropagation)},a.prototype.removeEventListener=function(){document.removeEventListener("keyup",this.keyUpCallback),this.element.removeEventListener("input",this.keyUpCallback)},a.prototype.destroy=function(){document.body.removeChild(this.element)},a.prototype.setMax=function(a,c){if(void 0!==a)if(this.type===b.text||this.type===b.password)this.element.maxLength=parseInt(a,10);else if(this.type===b.number){if(this.element.max=a,void 0===c)return;this.element.min=c}},Object.defineProperty(a.prototype,"value",{get:function(){return this.element.value},set:function(a){this.element.value=a},enumerable:!0,configurable:!0}),a.prototype.focus=function(){var a=this;if(this.element.focus(),!this.game.device.desktop&&this.game.device.chrome)var b=window.innerWidth,c=window.innerHeight,d=!1,e=setInterval(function(){(b>window.innerWidth||c>window.innerHeight)&&(d=!0),d&&b===window.innerWidth&&c===window.innerHeight&&(a.focusOut instanceof Phaser.Signal&&a.focusOut.dispatch(),clearInterval(e))},50)},a.prototype.blur=function(){this.element.blur()},Object.defineProperty(a.prototype,"hasSelection",{get:function(){return this.type===b.number?!1:this.element.selectionStart!==this.element.selectionEnd},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"caretStart",{get:function(){return this.element.selectionEnd},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"caretEnd",{get:function(){return this.element.selectionStart},enumerable:!0,configurable:!0}),a.prototype.getCaretPosition=function(){return this.type===b.number?-1:this.element.selectionStart},a.prototype.setCaretPosition=function(a){this.type!==b.number&&this.element.setSelectionRange(a,a)},a}();a.InputElement=c}(PhaserInput||(PhaserInput={}));var PhaserInput;!function(a){var b;!function(a){a[a.none=0]="none",a[a.lower=1]="lower",a[a.upper=2]="upper"}(b=a.ForceCase||(a.ForceCase={}));var c=function(c){function d(d,e,f,g){void 0===g&&(g={});var h=c.call(this,d,e,f)||this;return h.focusOutOnEnter=!0,h.placeHolder=null,h.box=null,h.focus=!1,h.value="",h.windowScale=1,h.blockInput=!0,h.focusIn=new Phaser.Signal,h.focusOut=new Phaser.Signal,h.blink=!0,h.cnt=0,h.inputOptions=g,h.inputOptions.width="number"==typeof g.width?g.width:150,h.inputOptions.padding="number"==typeof g.padding?g.padding:0,h.inputOptions.textAlign=g.textAlign||"left",h.inputOptions.type=g.type||a.InputType.text,h.inputOptions.forceCase=g.forceCase?g.forceCase:b.none,h.inputOptions.borderRadius="number"==typeof g.borderRadius?g.borderRadius:0,h.inputOptions.height="number"==typeof g.height?g.height:14,h.inputOptions.fillAlpha=void 0===g.fillAlpha?1:g.fillAlpha,h.inputOptions.selectionColor=g.selectionColor||"rgba(179, 212, 253, 0.8)",h.inputOptions.zoom=d.device.desktop?!1:g.zoom||!1,h.box=new a.InputBox(h.game,g),h.setTexture(h.box.generateTexture()),h.textMask=new a.TextMask(h.game,g),h.addChild(h.textMask),h.domElement=new a.InputElement(h.game,"phaser-input-"+(1e4*Math.random()|0).toString(),h.inputOptions.type,h.value,h.focusIn,h.focusOut),h.domElement.setMax(h.inputOptions.max,h.inputOptions.min),h.selection=new a.SelectionHighlight(h.game,h.inputOptions),h.selection.mask=h.textMask,h.addChild(h.selection),g.placeHolder&&g.placeHolder.length>0&&(h.placeHolder=new Phaser.Text(d,h.inputOptions.padding,h.inputOptions.padding,g.placeHolder,{font:g.font||"14px Arial",fontWeight:g.fontWeight||"normal",fill:g.placeHolderColor||"#bfbebd"}),h.placeHolder.mask=h.textMask,h.addChild(h.placeHolder)),h.cursor=new Phaser.Text(d,h.inputOptions.padding,h.inputOptions.padding-2,"|",{font:g.font||"14px Arial",fontWeight:g.fontWeight||"normal",fill:g.cursorColor||"#000000"}),h.cursor.visible=!1,h.addChild(h.cursor),h.text=new Phaser.Text(d,h.inputOptions.padding,h.inputOptions.padding,"",{font:g.font||"14px Arial",fontWeight:g.fontWeight||"normal",fill:g.fill||"#000000"}),h.text.mask=h.textMask,h.addChild(h.text),h.offscreenText=new Phaser.Text(d,h.inputOptions.padding,h.inputOptions.padding,"",{font:g.font||"14px Arial",fontWeight:g.fontWeight||"normal",fill:g.fill||"#000000"}),h.updateTextAlignment(),h.inputEnabled=!0,h.input.useHandCursor=!0,h.game.input.onDown.add(h.checkDown,h),h.focusOut.add(function(){a.KeyboardOpen&&(h.endFocus(),h.inputOptions.zoom&&h.zoomOut())}),h}return __extends(d,c),Object.defineProperty(d.prototype,"width",{get:function(){return this.inputOptions.width},set:function(a){this.inputOptions.width=a,this.box.resize(a),this.textMask.resize(a),this.updateTextAlignment()},enumerable:!0,configurable:!0}),d.prototype.updateTextAlignment=function(){switch(this.inputOptions.textAlign){case"left":this.text.anchor.set(0,0),this.text.x=this.inputOptions.padding,null!==this.placeHolder&&this.placeHolder.anchor.set(0,0),this.cursor.x=this.inputOptions.padding+this.getCaretPosition();break;case"center":this.text.anchor.set(.5,0),this.text.x=this.inputOptions.padding+this.inputOptions.width/2,null!==this.placeHolder&&(this.placeHolder.anchor.set(.5,0),this.placeHolder.x=this.inputOptions.padding+this.inputOptions.width/2),this.cursor.x=this.inputOptions.padding+this.inputOptions.width/2-this.text.width/2+this.getCaretPosition();break;case"right":this.text.anchor.set(1,0),this.text.x=this.inputOptions.padding+this.inputOptions.width,null!==this.placeHolder&&(this.placeHolder.anchor.set(1,0),this.placeHolder.x=this.inputOptions.padding+this.inputOptions.width),this.cursor.x=this.inputOptions.padding+this.inputOptions.width}},d.prototype.checkDown=function(b){if(this.value||this.resetText(),this.input.checkPointerOver(b)){if(this.focus)return void this.setCaretOnclick(b);this.inputOptions.zoom&&!a.Zoomed&&this.zoomIn(),this.startFocus()}else this.focus===!0&&(this.endFocus(),this.inputOptions.zoom&&this.zoomOut())},d.prototype.update=function(){if(this.text.update(),this.placeHolder&&this.placeHolder.update(),this.focus){if(30!==this.cnt)return this.cnt++;this.cursor.visible=this.blink,this.blink=!this.blink,this.cnt=0}},d.prototype.endFocus=function(){var b=this;this.focus&&(this.domElement.removeEventListener(),this.blockInput===!0&&this.domElement.unblockKeyDownEvents(),this.focus=!1,0===this.value.length&&null!==this.placeHolder&&(this.placeHolder.visible=!0),this.cursor.visible=!1,this.game.device.desktop?setTimeout(function(){b.domElement.blur()},0):this.domElement.blur(),this.game.device.desktop||(a.KeyboardOpen=!1,a.onKeyboardClose.dispatch()))},d.prototype.startFocus=function(){var b=this;this.focus=!0,null!==this.placeHolder&&(this.placeHolder.visible=!1),this.game.device.desktop?setTimeout(function(){b.keyUpProcessor()},0):this.keyUpProcessor(),this.game.device.desktop||(a.KeyboardOpen=!0,a.onKeyboardOpen.dispatch())},d.prototype.keyUpProcessor=function(){this.domElement.addKeyUpListener(this.keyListener.bind(this)),this.domElement.focus(),this.blockInput===!0&&this.domElement.blockKeyDownEvents()},d.prototype.updateText=function(){var b="";if(this.inputOptions.type===a.InputType.password)for(var c=0;cparseInt(this.inputOptions.max)?this.value=this.domElement.value=this.inputOptions.max:this.value}else b=this.value;if(this.text.setText(b),this.text.width>this.inputOptions.width)this.text.anchor.x=1,this.text.x=this.inputOptions.padding+this.inputOptions.width;else switch(this.inputOptions.textAlign){case"left":this.text.anchor.set(0,0),this.text.x=this.inputOptions.padding;break;case"center":this.text.anchor.set(.5,0),this.text.x=this.inputOptions.padding+this.inputOptions.width/2;break;case"right":this.text.anchor.set(1,0),this.text.x=this.inputOptions.padding+this.inputOptions.width}},d.prototype.updateCursor=function(){if(this.text.width>this.inputOptions.width||"right"===this.inputOptions.textAlign)this.cursor.x=this.inputOptions.padding+this.inputOptions.width;else switch(this.inputOptions.textAlign){case"left":this.cursor.x=this.inputOptions.padding+this.getCaretPosition();break;case"center":this.cursor.x=this.inputOptions.padding+this.inputOptions.width/2-this.text.width/2+this.getCaretPosition()}},d.prototype.getCaretPosition=function(){var b=this.domElement.getCaretPosition();if(-1===b)return this.text.width;var c=this.value;if(this.inputOptions.type===a.InputType.password){c="";for(var d=0;d=e*c&&(e+1)*c>=b){d=e;break}b>(this.value.length-1)*c&&(d=this.value.length),this.startFocus(),this.domElement.setCaretPosition(d),this.updateCursor()},d.prototype.updateSelection=function(){if(this.domElement.hasSelection){var b=this.value;if(this.inputOptions.type===a.InputType.password){b="";for(var c=0;cwindow.innerWidth?this.windowScale=this.game.width/(1.5*b.width):this.windowScale=this.game.width/2/(1.5*b.width);var c=(this.game.width-1.5*b.width)/2/this.windowScale;this.game.world.scale.set(this.game.world.scale.x*this.windowScale,this.game.world.scale.y*this.windowScale),this.game.world.pivot.set(b.x-c,b.y-2*this.inputOptions.padding),a.Zoomed=!0}},d.prototype.zoomOut=function(){a.Zoomed&&(this.game.world.scale.set(this.game.world.scale.x/this.windowScale,this.game.world.scale.y/this.windowScale),this.game.world.pivot.set(0,0),a.Zoomed=!1)},d.prototype.keyListener=function(a){return this.value=this.getFormattedText(this.domElement.value),13===a.keyCode?void(this.focusOutOnEnter&&this.endFocus()):(this.updateText(),this.updateCursor(),this.updateSelection(),void a.preventDefault())},d.prototype.destroy=function(a){this.game.input.onDown.remove(this.checkDown,this),this.focusIn.removeAll(),this.focusOut.removeAll(),this.domElement.destroy(),c.prototype.destroy.call(this,a)},d.prototype.resetText=function(){this.setText()},d.prototype.setText=function(a){void 0===a&&(a=""),null!==this.placeHolder&&(a.length>0?this.placeHolder.visible=!1:this.placeHolder.visible=!0),this.value=this.getFormattedText(a),this.domElement.value=this.value,this.updateText(),this.updateCursor(),this.endFocus()},d.prototype.getFormattedText=function(a){switch(this.inputOptions.forceCase){default:case b.none:return a;case b.lower:return a.toLowerCase();case b.upper:return a.toUpperCase()}},d}(Phaser.Sprite);a.InputField=c}(PhaserInput||(PhaserInput={}));var PhaserInput;!function(a){var b=function(a){function b(b,c){var d=a.call(this,b,0,0)||this;d.bgColor=c.backgroundColor?parseInt(c.backgroundColor.slice(1),16):16777215,d.borderRadius=c.borderRadius||0,d.borderWidth=c.borderWidth||1,d.borderColor=c.borderColor?parseInt(c.borderColor.slice(1),16):9803157,d.boxAlpha=c.fillAlpha,d.padding=c.padding;var e,e=c.height,f=c.width;c.font&&(e=Math.max(parseInt(c.font.substr(0,c.font.indexOf("px")),10),e)),d.boxHeight=2*d.padding+e;var f=c.width;return d.boxWidth=2*d.padding+f,d.drawBox(),d}return __extends(b,a),b.prototype.resize=function(a){this.boxWidth=2*this.padding+a,this.drawBox()},b.prototype.drawBox=function(){this.clear().beginFill(this.bgColor,this.boxAlpha).lineStyle(this.borderWidth,this.borderColor,this.boxAlpha),this.borderRadius>0?this.drawRoundedRect(0,0,this.boxWidth,this.boxHeight,this.borderRadius):this.drawRect(0,0,this.boxWidth,this.boxHeight)},b}(Phaser.Graphics);a.InputBox=b}(PhaserInput||(PhaserInput={}));var PhaserInput;!function(a){var b=function(a){function b(b,c){var d=a.call(this,b,c.padding,c.padding)||this;return d.inputOptions=c,d}return __extends(b,a),b.prototype.updateSelection=function(a){var c=Phaser.Color.webToColor(this.inputOptions.selectionColor);this.clear(),this.beginFill(b.rgb2hex(c),c.a),this.drawRect(a.x,a.y,a.width,a.height-this.inputOptions.padding)},b.rgb2hex=function(a){return parseInt(("0"+a.r.toString(16)).slice(-2)+("0"+a.g.toString(16)).slice(-2)+("0"+a.b.toString(16)).slice(-2),16)},b}(Phaser.Graphics);a.SelectionHighlight=b}(PhaserInput||(PhaserInput={}));var PhaserInput;!function(a){var b=function(a){function b(b,c){var d=a.call(this,b,c.padding,c.padding)||this,e=c.height;return c.font&&(e=Math.max(parseInt(c.font.substr(0,c.font.indexOf("px")),10),e)),d.maskWidth=c.width,d.maskHeight=1.3*e,d.drawMask(),d}return __extends(b,a),b.prototype.resize=function(a){this.maskWidth=a,this.drawMask()},b.prototype.drawMask=function(){this.clear().beginFill(0).drawRect(0,0,this.maskWidth,this.maskHeight).endFill()},b}(Phaser.Graphics);a.TextMask=b}(PhaserInput||(PhaserInput={}));var PhaserInput;!function(a){a.Zoomed=!1,a.KeyboardOpen=!1,a.onKeyboardOpen=new Phaser.Signal,a.onKeyboardClose=new Phaser.Signal;var b=function(b){function c(a,c){var d=b.call(this,a,c)||this;return d.addInputFieldFactory(),d}return __extends(c,b),c.prototype.addInputFieldFactory=function(){Phaser.GameObjectFactory.prototype.inputField=function(b,c,d,e){void 0===e&&(e=this.world);var f=new a.InputField(this.game,b,c,d);return e.add(f)},Phaser.GameObjectCreator.prototype.inputField=function(b,c,d){return new a.InputField(this.game,b,c,d)}},c}(Phaser.Plugin);b.Zoomed=!1,b.KeyboardOpen=!1,b.onKeyboardOpen=new Phaser.Signal,b.onKeyboardClose=new Phaser.Signal,a.Plugin=b}(PhaserInput||(PhaserInput={})); \ No newline at end of file diff --git a/src/util/phaser-input-master/config/tsconfig.json b/src/util/phaser-input-master/config/tsconfig.json new file mode 100755 index 0000000..6aab3cf --- /dev/null +++ b/src/util/phaser-input-master/config/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "module": "amd", + "target": "es5", + "sourceMap": true, + "noImplicitAny": true, + "removeComments": false, + "declaration": true, + "preserveConstEnums": true + } +} \ No newline at end of file diff --git a/src/util/phaser-input-master/config/tslint.json b/src/util/phaser-input-master/config/tslint.json new file mode 100755 index 0000000..d12a2cb --- /dev/null +++ b/src/util/phaser-input-master/config/tslint.json @@ -0,0 +1,131 @@ +{ + "rules": { + "align": [ + true, + "parameters", + "statements" + ], + "ban": false, + "class-name": true, + "curly": true, + "eofline": true, + "forin": true, + "indent": [ + true, + "spaces" + ], + "interface-name": true, + "jsdoc-format": true, + "label-position": true, + "label-undefined": true, + "max-line-length": [ + true, + 200 + ], + "member-access": true, + "no-any": false, + "no-arg": true, + "no-conditional-assignment": true, + "no-consecutive-blank-lines": true, + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-construct": true, + "no-constructor-vars": true, + "no-debugger": true, + "no-duplicate-key": true, + "no-duplicate-variable": true, + "no-empty": true, + "no-eval": true, + "no-inferrable-types": false, + "no-internal-module": false, + "no-null-keyword": false, + "no-require-imports": false, + "no-shadowed-variable": true, + "no-string-literal": false, + "no-switch-case-fall-through": false, + "no-trailing-whitespace": true, + "no-unreachable": true, + "no-unused-expression": true, + "no-unused-variable": true, + "no-use-before-declare": true, + "no-var-keyword": true, + "no-var-requires": true, + "object-literal-sort-keys": false, + "one-line": [ + true, + "check-open-brace", + "check-catch", + "check-else", + "check-finally", + "check-whitespace" + ], + "quotemark": [ + true, + "single", + "avoid-escape" + ], + "radix": true, + "semicolon": [ + true, + "always" + ], + "switch-default": false, + "trailing-comma": [ + true, + { + "multiline": "never", + "singleline": "never" + } + ], + "triple-equals": [ + true, + "allow-null-check" + ], + "typedef": [ + true, + "call-signature", + "parameter", + "arrow-parameter", + "property-declaration", + "variable-declaration", + "member-variable-declaration" + ], + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }, + { + "call-signature": "onespace", + "index-signature": "onespace", + "parameter": "onespace", + "property-declaration": "onespace", + "variable-declaration": "onespace" + } + ], + "use-strict": false, + "variable-name": [ + true, + "allow-leading-underscore", + "ban-keywords" + ], + "whitespace": [ + true, + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type" + ] + } +} \ No newline at end of file diff --git a/src/util/phaser-input-master/example/images/bg.png b/src/util/phaser-input-master/example/images/bg.png new file mode 100755 index 0000000000000000000000000000000000000000..b6a2db991534c5680da0b1905ab37ea944e8dfa7 GIT binary patch literal 122607 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 z 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 literal 0 HcmV?d00001 diff --git a/src/util/phaser-input-master/example/images/inputfield.png b/src/util/phaser-input-master/example/images/inputfield.png new file mode 100755 index 0000000000000000000000000000000000000000..5e71e1b8d3b4ec82f2c54814759ca32392275d5b GIT binary patch literal 1681 zcmaJ?X;2eq7!FrJC|Vqt67g7rr4%KbO-LY-l-xiihzLlvT9;%Y0g_EOiwTH|SZP75 zfI5N)M;YaiLqMTYEutgEf-;C&DYl{pQ0Y{SXFzH<2-+Xko!R}q@15s)-{(EP+3bk$ zU}wiUjwBMvIW$BZNvurb6*!QIZ~C%>gTz9?C9(KQG#=N(7(x;#&^QDLRl^BLBmyf^ zzrKJ3l1MgQs;F2zRu;yUqiPy#!O#q9Ex{&{0)q@%Se}I7Kpc{w((tGcerlrvDg}?a ziY24Vv?4^Q3Q5C|m1*Ho^0Xv5M?nqx3mRH2BHfd*I$LNq$4R$KC#MCYYNu|M0N&Y`o! z5-A6QBrJhcO6RZzB8foA7IE03X>O=Shr=2}eA*L6+^C(IpOVh9A)o6OR$2 z-5dX96LDj#LdAk8!|#6`Sib8r-@T*a@Yd~om)Uk_L$BL-B{i-K3#<=*?v(muSlyN} zGGRS`DEYQzw#*2OW&?&nwDK5#Q^}Ep#wLb+n7|*{g_X>jWJt zQ=GE+1y|CkB@gQh!@O#)CN}gZcRV{RrnXmK^;uTYce|?IIAUuYoV9!DBdIOr19DA& z^51T@XGc8kO%B{gx>xfkTL#9Z%`aTqJ!)bWAIS;pQ=C{Wn_FgQp0V@N^QWDsh6SXI zs_o}@N~&`5?N5FKUN=2vZliTZj_*!y+R`$hM%$12Bs&aYMGwYgw9NYl?b|h1N1vWT zh0zPYYKS%J1B^i}FB57#Zq08jURUjC&SRGJJpLmggEO?T<4(h6AU)h_*wuqS*h|ts z^A0I!%FJ)D8NU(dlASLI7c{#)%XO7}!N~JI)5%D5cP@why0@OaJDyt{KSz2_X)ze- zUQ2;{sw1#pZdNaStfcAC&4eFHcUBZ-_4dRM>?LgD8QEjx4=Wo*ZsJAKTN^I9q}9DB z&MWX9T67`Ru8@3lTUxy(uvKBJA^-kp{945)m9*MJMd202(a}D8P2Crc9)hy55c_>E zDSO{S2 zIt9IIOY(z+<-N*!x2=V%o7G)>Yu0{`=$^RhvWMh9hmN09uHST~fHHd>ugh*$Z4%ib zu?TkUhmSX}{VjLJ8E2O@59YPZP_1o>T2UL&=5&|7*$LoFhF8t$;Fa!qHPOAmicDJH WRn%TK+8bo~NrXzm#dX5 + + + + + + + Login example for Phaser Input + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/util/phaser-input-master/package-lock.json b/src/util/phaser-input-master/package-lock.json new file mode 100755 index 0000000..69ee6b6 --- /dev/null +++ b/src/util/phaser-input-master/package-lock.json @@ -0,0 +1,1942 @@ +{ + "name": "@orange-games/phaser-input", + "version": "2.0.4", + "lockfileVersion": 1, + "dependencies": { + "@orange-games/phaser-nineslice": { + "version": "https://registry.npmjs.org/@orange-games/phaser-nineslice/-/phaser-nineslice-2.0.0.tgz", + "integrity": "sha1-cXbZ6WGxNxSmaOruvJNExHg7Klg=", + "dev": true + }, + "abbrev": { + "version": "http://og-npm.ds.orangegames.com/abbrev/-/abbrev-1.0.7.tgz", + "integrity": "sha1-W2A1su6dT7XPhZ8Iqb6BsghJGEM=", + "dev": true + }, + "accepts": { + "version": "http://og-npm.ds.orangegames.com/accepts/-/accepts-1.2.13.tgz", + "integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=", + "dev": true + }, + "align-text": { + "version": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true + }, + "ansi-regex": { + "version": "http://og-npm.ds.orangegames.com/ansi-regex/-/ansi-regex-2.0.0.tgz", + "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=", + "dev": true + }, + "ansi-styles": { + "version": "http://og-npm.ds.orangegames.com/ansi-styles/-/ansi-styles-2.2.0.tgz", + "integrity": "sha1-xZGRk25u0cExWktra5fzrPv6aLA=", + "dev": true + }, + "anymatch": { + "version": "http://og-npm.ds.orangegames.com/anymatch/-/anymatch-1.3.0.tgz", + "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", + "dev": true + }, + "argparse": { + "version": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true + }, + "arr-diff": { + "version": "http://og-npm.ds.orangegames.com/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true + }, + "arr-flatten": { + "version": "http://og-npm.ds.orangegames.com/arr-flatten/-/arr-flatten-1.0.1.tgz", + "integrity": "sha1-5f/lTUXhnzLyFukeuZyM6JK7YEs=", + "dev": true + }, + "array-find-index": { + "version": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-unique": { + "version": "http://og-npm.ds.orangegames.com/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arrify": { + "version": "http://og-npm.ds.orangegames.com/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "async": { + "version": "http://og-npm.ds.orangegames.com/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each": { + "version": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "balanced-match": { + "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + }, + "basic-auth": { + "version": "http://og-npm.ds.orangegames.com/basic-auth/-/basic-auth-1.0.3.tgz", + "integrity": "sha1-QfVVI+WJQFA47jVnlYxipe1wVRo=", + "dev": true + }, + "batch": { + "version": "http://og-npm.ds.orangegames.com/batch/-/batch-0.5.3.tgz", + "integrity": "sha1-PzQU84AyF0O/wQQvmoP/HVgk1GQ=", + "dev": true + }, + "binary-extensions": { + "version": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", + "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=", + "dev": true + }, + "brace-expansion": { + "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", + "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=", + "dev": true + }, + "braces": { + "version": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true + }, + "buffer-shims": { + "version": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", + "dev": true + }, + "builtin-modules": { + "version": "http://og-npm.ds.orangegames.com/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "camelcase": { + "version": "http://og-npm.ds.orangegames.com/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "camelcase-keys": { + "version": "http://og-npm.ds.orangegames.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "dependencies": { + "camelcase": { + "version": "http://og-npm.ds.orangegames.com/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "center-align": { + "version": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true + }, + "chalk": { + "version": "http://og-npm.ds.orangegames.com/chalk/-/chalk-1.1.1.tgz", + "integrity": "sha1-UJr7ZwZudJn36zU1x3RFdyri0Bk=", + "dev": true + }, + "chokidar": { + "version": "https://registry.npmjs.org/chokidar/-/chokidar-1.6.1.tgz", + "integrity": "sha1-L0RHq16W5Q+z14n9kNTHLg5McMI=", + "dev": true + }, + "cliui": { + "version": "http://og-npm.ds.orangegames.com/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true + }, + "coffee-script": { + "version": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.10.0.tgz", + "integrity": "sha1-EpOLz5vhlI+gBvkuDEyegXBRCMA=", + "dev": true + }, + "color-convert": { + "version": "http://og-npm.ds.orangegames.com/color-convert/-/color-convert-1.0.0.tgz", + "integrity": "sha1-PCb82IXSctRb6s9uQbq6dciahXk=", + "dev": true + }, + "colors": { + "version": "http://og-npm.ds.orangegames.com/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "concat-map": { + "version": "http://og-npm.ds.orangegames.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "connect": { + "version": "http://og-npm.ds.orangegames.com/connect/-/connect-3.4.1.tgz", + "integrity": "sha1-ohNh0/QJnvdhzabcSpc7seuwo00=", + "dev": true + }, + "connect-livereload": { + "version": "http://og-npm.ds.orangegames.com/connect-livereload/-/connect-livereload-0.5.4.tgz", + "integrity": "sha1-gBV9E3HJ83zBQDmrGJWXDRGdw7w=", + "dev": true + }, + "core-util-is": { + "version": "http://og-npm.ds.orangegames.com/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "csproj2ts": { + "version": "https://registry.npmjs.org/csproj2ts/-/csproj2ts-0.0.8.tgz", + "integrity": "sha1-nRxxniDELM6MTeKQCO/DVUn9Em8=", + "dev": true, + "dependencies": { + "es6-promise": { + "version": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.0.5.tgz", + "integrity": "sha1-eILzCt3lskDM+n99eMVIMwlRrkI=", + "dev": true + }, + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "currently-unhandled": { + "version": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true + }, + "dateformat": { + "version": "http://og-npm.ds.orangegames.com/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true + }, + "debug": { + "version": "http://og-npm.ds.orangegames.com/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true + }, + "decamelize": { + "version": "http://og-npm.ds.orangegames.com/decamelize/-/decamelize-1.1.2.tgz", + "integrity": "sha1-3Mk3J74gljLpiwJxjvTLeWAjIvI=", + "dev": true + }, + "depd": { + "version": "http://og-npm.ds.orangegames.com/depd/-/depd-1.0.1.tgz", + "integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo=", + "dev": true + }, + "destroy": { + "version": "http://og-npm.ds.orangegames.com/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "duplexer": { + "version": "http://og-npm.ds.orangegames.com/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "ee-first": { + "version": "http://og-npm.ds.orangegames.com/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "error-ex": { + "version": "http://og-npm.ds.orangegames.com/error-ex/-/error-ex-1.3.0.tgz", + "integrity": "sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=", + "dev": true + }, + "es6-promise": { + "version": "https://registry.npmjs.org/es6-promise/-/es6-promise-0.1.2.tgz", + "integrity": "sha1-8RLCn+paCZhTn8tqL9IUQ9KPBfc=", + "dev": true + }, + "escape-html": { + "version": "http://og-npm.ds.orangegames.com/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "http://og-npm.ds.orangegames.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "etag": { + "version": "http://og-npm.ds.orangegames.com/etag/-/etag-1.7.0.tgz", + "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=", + "dev": true + }, + "eventemitter2": { + "version": "http://og-npm.ds.orangegames.com/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", + "dev": true + }, + "exit": { + "version": "http://og-npm.ds.orangegames.com/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "http://og-npm.ds.orangegames.com/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true + }, + "expand-range": { + "version": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true + }, + "extglob": { + "version": "http://og-npm.ds.orangegames.com/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true + }, + "faye-websocket": { + "version": "http://og-npm.ds.orangegames.com/faye-websocket/-/faye-websocket-0.4.4.tgz", + "integrity": "sha1-wUxbO/FNdBf/v9mQwKdJXNnzN7w=", + "dev": true + }, + "figures": { + "version": "http://og-npm.ds.orangegames.com/figures/-/figures-1.4.0.tgz", + "integrity": "sha1-649WOQ2+MIEESlwqnZCJB1pIQy8=", + "dev": true + }, + "filename-regex": { + "version": "http://og-npm.ds.orangegames.com/filename-regex/-/filename-regex-2.0.0.tgz", + "integrity": "sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U=", + "dev": true + }, + "fill-range": { + "version": "http://og-npm.ds.orangegames.com/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true + }, + "finalhandler": { + "version": "http://og-npm.ds.orangegames.com/finalhandler/-/finalhandler-0.4.1.tgz", + "integrity": "sha1-haF8bFmpRxfSYtYSMNSw6+PUoU0=", + "dev": true + }, + "find-up": { + "version": "http://og-npm.ds.orangegames.com/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true + }, + "findup-sync": { + "version": "http://og-npm.ds.orangegames.com/findup-sync/-/findup-sync-0.3.0.tgz", + "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "dev": true, + "dependencies": { + "glob": { + "version": "http://og-npm.ds.orangegames.com/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", + "dev": true + } + } + }, + "for-in": { + "version": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz", + "integrity": "sha1-yfluib+tGKVFr17D7TUqHZ5bTcg=", + "dev": true + }, + "for-own": { + "version": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz", + "integrity": "sha1-AUm0GjkIjHUV9R6+HBOG1F+TUHI=", + "dev": true + }, + "fresh": { + "version": "http://og-npm.ds.orangegames.com/fresh/-/fresh-0.3.0.tgz", + "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=", + "dev": true + }, + "fs.realpath": { + "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.1.tgz", + "integrity": "sha1-8Z/Sj0Pur3YWgOUZogPE0LPTGv8=", + "dev": true, + "optional": true, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.6", + "bundled": true, + "dev": true + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.11.0", + "bundled": true, + "dev": true, + "optional": true + }, + "chalk": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "commander": { + "version": "2.9.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "deep-extend": { + "version": "0.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "extend": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.10", + "bundled": true, + "dev": true + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.3", + "bundled": true, + "dev": true, + "optional": true + }, + "generate-function": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "generate-object-property": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "getpass": { + "version": "0.1.6", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.1", + "bundled": true, + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "2.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "has-ansi": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "optional": true + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-my-json-valid": { + "version": "2.15.0", + "bundled": true, + "dev": true, + "optional": true + }, + "is-property": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonpointer": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.3.1", + "bundled": true, + "dev": true, + "optional": true + }, + "mime-db": { + "version": "1.26.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.14", + "bundled": true, + "dev": true + }, + "minimatch": { + "version": "3.0.3", + "bundled": true, + "dev": true + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true + }, + "ms": { + "version": "0.7.1", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.33", + "bundled": true, + "dev": true, + "optional": true + }, + "nopt": { + "version": "3.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "npmlog": { + "version": "4.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "optional": true + }, + "pinkie-promise": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.3.1", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.2", + "bundled": true, + "dev": true, + "optional": true + }, + "request": { + "version": "2.79.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rimraf": { + "version": "2.5.4", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "optional": true + }, + "sshpk": { + "version": "1.10.2", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true, + "dev": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "supports-color": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true + }, + "tar-pack": { + "version": "3.3.0", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "once": { + "version": "1.3.3", + "bundled": true, + "dev": true, + "optional": true + }, + "readable-stream": { + "version": "2.1.5", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true + }, + "tunnel-agent": { + "version": "0.4.3", + "bundled": true, + "dev": true, + "optional": true + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "xtend": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "gaze": { + "version": "http://og-npm.ds.orangegames.com/gaze/-/gaze-0.5.2.tgz", + "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", + "dev": true + }, + "get-stdin": { + "version": "http://og-npm.ds.orangegames.com/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "getobject": { + "version": "http://og-npm.ds.orangegames.com/getobject/-/getobject-0.1.0.tgz", + "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", + "dev": true + }, + "glob": { + "version": "http://og-npm.ds.orangegames.com/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", + "dev": true, + "dependencies": { + "inherits": { + "version": "http://og-npm.ds.orangegames.com/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true + } + } + }, + "glob-base": { + "version": "http://og-npm.ds.orangegames.com/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true + }, + "glob-parent": { + "version": "http://og-npm.ds.orangegames.com/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true + }, + "globule": { + "version": "http://og-npm.ds.orangegames.com/globule/-/globule-0.1.0.tgz", + "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", + "dev": true, + "dependencies": { + "lodash": { + "version": "http://og-npm.ds.orangegames.com/lodash/-/lodash-1.0.2.tgz", + "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", + "dev": true + } + } + }, + "graceful-fs": { + "version": "http://og-npm.ds.orangegames.com/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", + "dev": true + }, + "grunt": { + "version": "https://registry.npmjs.org/grunt/-/grunt-1.0.1.tgz", + "integrity": "sha1-6HeHZOlEsY8yuw8QuQeEdcnftWs=", + "dev": true, + "dependencies": { + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "dev": true + }, + "grunt-cli": { + "version": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", + "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", + "dev": true + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", + "dev": true + } + } + }, + "grunt-banner": { + "version": "http://og-npm.ds.orangegames.com/grunt-banner/-/grunt-banner-0.6.0.tgz", + "integrity": "sha1-P4eQIdEj+linuloLb7a+QStYhaw=", + "dev": true + }, + "grunt-contrib-clean": { + "version": "http://og-npm.ds.orangegames.com/grunt-contrib-clean/-/grunt-contrib-clean-0.6.0.tgz", + "integrity": "sha1-9TLbpLghJnTHwBPhRr2mY4uQSPY=", + "dev": true + }, + "grunt-contrib-connect": { + "version": "http://og-npm.ds.orangegames.com/grunt-contrib-connect/-/grunt-contrib-connect-0.11.2.tgz", + "integrity": "sha1-HAoHB9OzKNnPO0tJDrhMSV2Tau0=", + "dev": true, + "dependencies": { + "async": { + "version": "http://og-npm.ds.orangegames.com/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + } + } + }, + "grunt-contrib-uglify": { + "version": "http://og-npm.ds.orangegames.com/grunt-contrib-uglify/-/grunt-contrib-uglify-0.11.1.tgz", + "integrity": "sha1-XiKi9nbNEdhx/CoPCKqbKXMEUyU=", + "dev": true, + "dependencies": { + "lodash": { + "version": "http://og-npm.ds.orangegames.com/lodash/-/lodash-4.5.1.tgz", + "integrity": "sha1-gOigdMpfOJOmscELKmNkktcQwxY=", + "dev": true + } + } + }, + "grunt-contrib-watch": { + "version": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz", + "integrity": "sha1-ZP3LolpjX1tNobbOb5DaCutuPxU=", + "dev": true, + "dependencies": { + "async": { + "version": "http://og-npm.ds.orangegames.com/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "lodash": { + "version": "http://og-npm.ds.orangegames.com/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + } + } + }, + "grunt-known-options": { + "version": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", + "integrity": "sha1-pCdO6zL6dl2lp6OxcSYXzjsUQUk=", + "dev": true + }, + "grunt-legacy-log": { + "version": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.0.tgz", + "integrity": "sha1-+4bxgJhHvAfcR4Q/ns1srLYt8tU=", + "dev": true + }, + "grunt-legacy-log-utils": { + "version": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz", + "integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=", + "dev": true, + "dependencies": { + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", + "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", + "dev": true + } + } + }, + "grunt-legacy-util": { + "version": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz", + "integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=", + "dev": true, + "dependencies": { + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", + "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", + "dev": true + } + } + }, + "grunt-ts": { + "version": "https://registry.npmjs.org/grunt-ts/-/grunt-ts-6.0.0-beta.11.tgz", + "integrity": "sha1-TleIAPLnlgZpb8H4PEqY4Z6Vb1Y=", + "dev": true, + "dependencies": { + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "rimraf": { + "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.6.tgz", + "integrity": "sha1-xZWXVpsU2VatKcrMQr3d9fDqT0w=", + "dev": true + } + } + }, + "gzip-size": { + "version": "http://og-npm.ds.orangegames.com/gzip-size/-/gzip-size-3.0.0.tgz", + "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", + "dev": true + }, + "has-ansi": { + "version": "http://og-npm.ds.orangegames.com/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true + }, + "hooker": { + "version": "http://og-npm.ds.orangegames.com/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "dev": true + }, + "hosted-git-info": { + "version": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz", + "integrity": "sha1-C6gdkNouJas0ozLm7HeTbhWYEYs=", + "dev": true + }, + "http-errors": { + "version": "http://og-npm.ds.orangegames.com/http-errors/-/http-errors-1.3.1.tgz", + "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", + "dev": true + }, + "iconv-lite": { + "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", + "dev": true + }, + "indent-string": { + "version": "http://og-npm.ds.orangegames.com/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true + }, + "inflight": { + "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true + }, + "inherits": { + "version": "http://og-npm.ds.orangegames.com/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "is-arrayish": { + "version": "http://og-npm.ds.orangegames.com/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "http://og-npm.ds.orangegames.com/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true + }, + "is-buffer": { + "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.2.tgz", + "integrity": "sha1-+hImWI+gBIsAXEfk+xuxVV1e3qo=", + "dev": true + }, + "is-builtin-module": { + "version": "http://og-npm.ds.orangegames.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true + }, + "is-dotfile": { + "version": "http://og-npm.ds.orangegames.com/is-dotfile/-/is-dotfile-1.0.2.tgz", + "integrity": "sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=", + "dev": true + }, + "is-equal-shallow": { + "version": "http://og-npm.ds.orangegames.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true + }, + "is-extendable": { + "version": "http://og-npm.ds.orangegames.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "http://og-npm.ds.orangegames.com/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true + }, + "is-glob": { + "version": "http://og-npm.ds.orangegames.com/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true + }, + "is-number": { + "version": "http://og-npm.ds.orangegames.com/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true + }, + "is-posix-bracket": { + "version": "http://og-npm.ds.orangegames.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "http://og-npm.ds.orangegames.com/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-utf8": { + "version": "http://og-npm.ds.orangegames.com/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "http://og-npm.ds.orangegames.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "http://og-npm.ds.orangegames.com/isexe/-/isexe-1.1.2.tgz", + "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=", + "dev": true + }, + "isobject": { + "version": "http://og-npm.ds.orangegames.com/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true + }, + "js-yaml": { + "version": "http://og-npm.ds.orangegames.com/js-yaml/-/js-yaml-3.5.5.tgz", + "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=", + "dev": true + }, + "kind-of": { + "version": "http://og-npm.ds.orangegames.com/kind-of/-/kind-of-3.0.2.tgz", + "integrity": "sha1-GH20JwRufpCUVpLmdoZovWkA3qA=", + "dev": true + }, + "lazy-cache": { + "version": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.3.tgz", + "integrity": "sha1-6XdUYY+ciGu5mbL/aceLgkU9ZnQ=", + "dev": true + }, + "load-json-file": { + "version": "http://og-npm.ds.orangegames.com/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "lodash": { + "version": "http://og-npm.ds.orangegames.com/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "longest": { + "version": "http://og-npm.ds.orangegames.com/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loud-rejection": { + "version": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true + }, + "lru-cache": { + "version": "http://og-npm.ds.orangegames.com/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "map-obj": { + "version": "http://og-npm.ds.orangegames.com/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "maxmin": { + "version": "http://og-npm.ds.orangegames.com/maxmin/-/maxmin-2.1.0.tgz", + "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=", + "dev": true + }, + "meow": { + "version": "http://og-npm.ds.orangegames.com/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true + }, + "micromatch": { + "version": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true + }, + "mime": { + "version": "http://og-npm.ds.orangegames.com/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=", + "dev": true + }, + "mime-db": { + "version": "http://og-npm.ds.orangegames.com/mime-db/-/mime-db-1.21.0.tgz", + "integrity": "sha1-m1I54zU89usBWgDYkCYQJ8NtS6w=", + "dev": true + }, + "mime-types": { + "version": "http://og-npm.ds.orangegames.com/mime-types/-/mime-types-2.1.9.tgz", + "integrity": "sha1-37OWdktf33W+NLH0EEvDaH+2Nfg=", + "dev": true + }, + "minimatch": { + "version": "http://og-npm.ds.orangegames.com/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "dev": true + }, + "minimist": { + "version": "http://og-npm.ds.orangegames.com/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "morgan": { + "version": "http://og-npm.ds.orangegames.com/morgan/-/morgan-1.6.1.tgz", + "integrity": "sha1-X9gYOYxoGcuiinzWZk8pL+HAu/I=", + "dev": true + }, + "ms": { + "version": "http://og-npm.ds.orangegames.com/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "nan": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", + "dev": true, + "optional": true + }, + "ncp": { + "version": "https://registry.npmjs.org/ncp/-/ncp-0.5.1.tgz", + "integrity": "sha1-dDmFMW49tFkoG1hxaehFc1oFQ58=", + "dev": true + }, + "negotiator": { + "version": "http://og-npm.ds.orangegames.com/negotiator/-/negotiator-0.5.3.tgz", + "integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g=", + "dev": true + }, + "nopt": { + "version": "http://og-npm.ds.orangegames.com/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true + }, + "noptify": { + "version": "http://og-npm.ds.orangegames.com/noptify/-/noptify-0.0.3.tgz", + "integrity": "sha1-WPZUpz2XU98MUdlobckhBKZ/S7s=", + "dev": true, + "dependencies": { + "nopt": { + "version": "http://og-npm.ds.orangegames.com/nopt/-/nopt-2.0.0.tgz", + "integrity": "sha1-ynQW8gpeP5w7hhgPlilfo9C1Lg0=", + "dev": true + } + } + }, + "normalize-package-data": { + "version": "http://og-npm.ds.orangegames.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz", + "integrity": "sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=", + "dev": true + }, + "normalize-path": { + "version": "http://og-npm.ds.orangegames.com/normalize-path/-/normalize-path-2.0.1.tgz", + "integrity": "sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=", + "dev": true + }, + "number-is-nan": { + "version": "http://og-npm.ds.orangegames.com/number-is-nan/-/number-is-nan-1.0.0.tgz", + "integrity": "sha1-wCD1KcUoKt/dIz2R1LGBw9aG3Es=", + "dev": true + }, + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object.omit": { + "version": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true + }, + "on-finished": { + "version": "http://og-npm.ds.orangegames.com/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true + }, + "on-headers": { + "version": "http://og-npm.ds.orangegames.com/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true + }, + "opn": { + "version": "http://og-npm.ds.orangegames.com/opn/-/opn-1.0.2.tgz", + "integrity": "sha1-uQlkM0bQChq8l3qLlvPOPFPVz18=", + "dev": true + }, + "parse-glob": { + "version": "http://og-npm.ds.orangegames.com/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true + }, + "parse-json": { + "version": "http://og-npm.ds.orangegames.com/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true + }, + "parseurl": { + "version": "http://og-npm.ds.orangegames.com/parseurl/-/parseurl-1.3.1.tgz", + "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=", + "dev": true + }, + "path-exists": { + "version": "http://og-npm.ds.orangegames.com/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true + }, + "path-is-absolute": { + "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-type": { + "version": "http://og-npm.ds.orangegames.com/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } + } + }, + "phaser": { + "version": "https://registry.npmjs.org/phaser/-/phaser-2.6.2.tgz", + "integrity": "sha1-6zkSFyWiFJxJ9GtdFEMYwivAkkk=", + "dev": true + }, + "pify": { + "version": "http://og-npm.ds.orangegames.com/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "http://og-npm.ds.orangegames.com/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "http://og-npm.ds.orangegames.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true + }, + "portscanner": { + "version": "http://og-npm.ds.orangegames.com/portscanner/-/portscanner-1.0.0.tgz", + "integrity": "sha1-O1z+OTgotRYKvGAOYnDrwvFZBVg=", + "dev": true, + "dependencies": { + "async": { + "version": "http://og-npm.ds.orangegames.com/async/-/async-0.1.15.tgz", + "integrity": "sha1-IYDqyizypspSgNQcBYW+ybPkm9M=", + "dev": true + } + } + }, + "preserve": { + "version": "http://og-npm.ds.orangegames.com/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-bytes": { + "version": "http://og-npm.ds.orangegames.com/pretty-bytes/-/pretty-bytes-3.0.1.tgz", + "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=", + "dev": true + }, + "process-nextick-args": { + "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "qs": { + "version": "http://og-npm.ds.orangegames.com/qs/-/qs-0.5.6.tgz", + "integrity": "sha1-MbGtBYVnZRxSaSFQa5qHk5EaA4Q=", + "dev": true + }, + "randomatic": { + "version": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", + "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=", + "dev": true + }, + "range-parser": { + "version": "http://og-npm.ds.orangegames.com/range-parser/-/range-parser-1.0.3.tgz", + "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU=", + "dev": true + }, + "read-pkg": { + "version": "http://og-npm.ds.orangegames.com/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true + }, + "read-pkg-up": { + "version": "http://og-npm.ds.orangegames.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "integrity": "sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=", + "dev": true + }, + "readdirp": { + "version": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "dependencies": { + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", + "dev": true + } + } + }, + "redent": { + "version": "http://og-npm.ds.orangegames.com/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true + }, + "regex-cache": { + "version": "http://og-npm.ds.orangegames.com/regex-cache/-/regex-cache-0.4.3.tgz", + "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "dev": true + }, + "repeat-element": { + "version": "http://og-npm.ds.orangegames.com/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "http://og-npm.ds.orangegames.com/repeat-string/-/repeat-string-1.5.2.tgz", + "integrity": "sha1-IQZfcHJ60FOg3V6VesngDHVg2Qo=", + "dev": true + }, + "repeating": { + "version": "http://og-npm.ds.orangegames.com/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true + }, + "resolve": { + "version": "http://og-npm.ds.orangegames.com/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "right-align": { + "version": "http://og-npm.ds.orangegames.com/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true + }, + "rimraf": { + "version": "http://og-npm.ds.orangegames.com/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true + }, + "sax": { + "version": "http://og-npm.ds.orangegames.com/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=", + "dev": true + }, + "semver": { + "version": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + }, + "send": { + "version": "http://og-npm.ds.orangegames.com/send/-/send-0.13.1.tgz", + "integrity": "sha1-ow1fTILIqbrprQCh2bG9vm8Zntc=", + "dev": true, + "dependencies": { + "depd": { + "version": "http://og-npm.ds.orangegames.com/depd/-/depd-1.1.0.tgz", + "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=", + "dev": true + } + } + }, + "serve-index": { + "version": "http://og-npm.ds.orangegames.com/serve-index/-/serve-index-1.7.3.tgz", + "integrity": "sha1-egV/xu4o3GP2RWbl+lexEahq7NI=", + "dev": true + }, + "serve-static": { + "version": "http://og-npm.ds.orangegames.com/serve-static/-/serve-static-1.10.2.tgz", + "integrity": "sha1-/rgA0OciEk3QsAMzFgwW6cqovLM=", + "dev": true + }, + "set-immediate-shim": { + "version": "http://og-npm.ds.orangegames.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "sigmund": { + "version": "http://og-npm.ds.orangegames.com/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "signal-exit": { + "version": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "source-map": { + "version": "http://og-npm.ds.orangegames.com/source-map/-/source-map-0.5.3.tgz", + "integrity": "sha1-gmdLhacbC+dsPnQW0V6fUlLrO+A=", + "dev": true + }, + "spdx-correct": { + "version": "http://og-npm.ds.orangegames.com/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true + }, + "spdx-expression-parse": { + "version": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "sprintf-js": { + "version": "http://og-npm.ds.orangegames.com/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "statuses": { + "version": "http://og-npm.ds.orangegames.com/statuses/-/statuses-1.2.1.tgz", + "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=", + "dev": true + }, + "string_decoder": { + "version": "http://og-npm.ds.orangegames.com/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "strip-ansi": { + "version": "http://og-npm.ds.orangegames.com/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true + }, + "strip-bom": { + "version": "http://og-npm.ds.orangegames.com/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true + }, + "strip-indent": { + "version": "http://og-npm.ds.orangegames.com/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true + }, + "supports-color": { + "version": "http://og-npm.ds.orangegames.com/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "tiny-lr-fork": { + "version": "http://og-npm.ds.orangegames.com/tiny-lr-fork/-/tiny-lr-fork-0.0.5.tgz", + "integrity": "sha1-Hpnh4qhGm3NquX2X7vqYxx927Qo=", + "dev": true, + "dependencies": { + "debug": { + "version": "http://og-npm.ds.orangegames.com/debug/-/debug-0.7.4.tgz", + "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", + "dev": true + } + } + }, + "trim-newlines": { + "version": "http://og-npm.ds.orangegames.com/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "typescript": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.3.4.tgz", + "integrity": "sha1-PTgyGCgjHkNPKHUUlZw3qCtin0I=", + "dev": true + }, + "uglify-js": { + "version": "http://og-npm.ds.orangegames.com/uglify-js/-/uglify-js-2.6.2.tgz", + "integrity": "sha1-9QvoikLNOWpiUdxSqzcvccwS/vA=", + "dev": true, + "dependencies": { + "async": { + "version": "http://og-npm.ds.orangegames.com/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + } + } + }, + "uglify-to-browserify": { + "version": "http://og-npm.ds.orangegames.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true + }, + "underscore.string": { + "version": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.2.3.tgz", + "integrity": "sha1-gGmSYzZl1eX8tNsfs6hi62jp5to=", + "dev": true + }, + "unpipe": { + "version": "http://og-npm.ds.orangegames.com/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "uri-path": { + "version": "http://og-npm.ds.orangegames.com/uri-path/-/uri-path-1.0.0.tgz", + "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=", + "dev": true + }, + "util-deprecate": { + "version": "http://og-npm.ds.orangegames.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "http://og-npm.ds.orangegames.com/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", + "dev": true + }, + "validate-npm-package-license": { + "version": "http://og-npm.ds.orangegames.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true + }, + "which": { + "version": "https://registry.npmjs.org/which/-/which-1.2.12.tgz", + "integrity": "sha1-3me15FAmnxlJCe8j7OTr5Bb6EZI=", + "dev": true + }, + "window-size": { + "version": "http://og-npm.ds.orangegames.com/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "http://og-npm.ds.orangegames.com/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "wrappy": { + "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xml2js": { + "version": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz", + "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=", + "dev": true + }, + "xmlbuilder": { + "version": "http://og-npm.ds.orangegames.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz", + "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", + "dev": true, + "dependencies": { + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "yargs": { + "version": "http://og-npm.ds.orangegames.com/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true + } + } +} diff --git a/src/util/phaser-input-master/package.json b/src/util/phaser-input-master/package.json new file mode 100755 index 0000000..7a9ed0b --- /dev/null +++ b/src/util/phaser-input-master/package.json @@ -0,0 +1,37 @@ +{ + "name": "@orange-games/phaser-input", + "author": "OrangeGames", + "version": "2.0.5", + "description": "Adds input boxes to Phaser like CanvasInput, but also works for WebGL and Mobile, made for Phaser only.", + "contributors": [ + { + "name": "Ale Bles", + "email": "a.bles@orangegames.com" + } + ], + "repository": { + "type": "git", + "url": "git@github.com:orange-games/phaser-input.git" + }, + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/orange-games/phaser-input/raw/master/LICENSE" + } + ], + "config": { + "name": "phaser-input" + }, + "devDependencies": { + "@orange-games/phaser-nineslice": "^2.0.0", + "grunt": "1.0.x", + "grunt-banner": "^0.6.0", + "grunt-contrib-clean": "0.6.0", + "grunt-contrib-connect": "^0.11.2", + "grunt-contrib-uglify": "^0.11.0", + "grunt-contrib-watch": "^0.6.1", + "grunt-ts": "^6.0.0-beta.11", + "phaser": "2.6.2", + "typescript": "2.3.x" + } +} diff --git a/src/util/phaser-input-master/ts/InputElement.ts b/src/util/phaser-input-master/ts/InputElement.ts new file mode 100755 index 0000000..f9c086e --- /dev/null +++ b/src/util/phaser-input-master/ts/InputElement.ts @@ -0,0 +1,184 @@ +module PhaserInput { + + export enum InputType { + text, + password, + number + } + + export class InputElement { + private element: HTMLInputElement; + + private keyUpCallback: () => void; + + private inputChangeCallback: () => void; + + private type: InputType; + + private id: string; + + private game: Phaser.Game; + + private focusIn: Phaser.Signal; + + private focusOut: Phaser.Signal; + + constructor(game: Phaser.Game, id: string, type: InputType = InputType.text, value: string = '', focusIn?: Phaser.Signal, focusOut?: Phaser.Signal) { + this.id = id; + this.type = type; + this.game = game; + this.focusIn = focusIn; + this.focusOut = focusOut; + + let canvasTopX: number = this.game.canvas.getBoundingClientRect().top + document.body.scrollTop; + + this.element = document.createElement('input'); + + this.element.id = id; + this.element.style.position = 'absolute'; + this.element.style.top = canvasTopX + 'px'; + this.element.style.left = (-40).toString() + 'px'; + this.element.style.width = (10).toString() + 'px'; + this.element.style.height = (10).toString() + 'px'; + this.element.style.border = '0px'; + this.element.value = this.value; + this.element.type = InputType[type]; + + this.element.addEventListener('focusin', (): void => { + if (this.focusIn instanceof Phaser.Signal) { + this.focusIn.dispatch(); + } + }); + this.element.addEventListener('focusout', (): void => { + if (this.focusOut instanceof Phaser.Signal) { + this.focusOut.dispatch(); + } + }); + + document.body.appendChild(this.element); + } + + public addKeyUpListener(callback: () => void): void { + this.keyUpCallback = callback; + document.addEventListener('keyup', this.keyUpCallback); + this.element.addEventListener('input', this.keyUpCallback); + + } + + /** + * Captures the keyboard event on keydown, used to prevent it going from input field to sprite + **/ + public blockKeyDownEvents(): void { + document.addEventListener('keydown', this.preventKeyPropagation); + } + + /** + * To prevent bubbling of keyboard event from input field to sprite + **/ + private preventKeyPropagation(evt: KeyboardEvent): void{ + if(evt.stopPropagation){ + evt.stopPropagation(); + } else { + //for IE < 9 + event.cancelBubble = true; + } + } + + /** + * Remove listener that captures keydown keyboard events + **/ + public unblockKeyDownEvents(): void { + document.removeEventListener('keydown', this.preventKeyPropagation); + } + + public removeEventListener(): void { + document.removeEventListener('keyup', this.keyUpCallback); + this.element.removeEventListener('input', this.keyUpCallback); + } + + public destroy() { + document.body.removeChild(this.element); + } + + public setMax(max: string, min?: string) { + if (max === undefined) { + return; + } + + if (this.type === InputType.text || this.type === InputType.password) { + this.element.maxLength = parseInt(max, 10); + } else if (this.type === InputType.number) { + this.element.max = max; + if (min === undefined) { + return; + } + + this.element.min = min; + } + } + + get value(): string { + return this.element.value; + } + + set value(value: string) { + this.element.value = value; + } + + public focus(): void { + this.element.focus(); + if (!this.game.device.desktop && this.game.device.chrome) { + let originalWidth = window.innerWidth, + originalHeight = window.innerHeight; + + let kbAppeared: boolean = false; + let interval: number = setInterval((): void => { + if (originalWidth > window.innerWidth || originalHeight > window.innerHeight) { + kbAppeared = true; + } + + if (kbAppeared && originalWidth === window.innerWidth && originalHeight === window.innerHeight) { + if (this.focusOut instanceof Phaser.Signal) { + this.focusOut.dispatch(); + } + clearInterval(interval); + } + }, 50); + } + } + + public blur(): void { + this.element.blur(); + } + + get hasSelection () { + if (this.type === InputType.number) { + return false; + } + + return this.element.selectionStart !== this.element.selectionEnd; + } + + get caretStart() { + return this.element.selectionEnd; + } + + get caretEnd() { + return this.element.selectionStart; + } + + public getCaretPosition() { + if (this.type === InputType.number) { + return -1; + } + return this.element.selectionStart; + } + + public setCaretPosition(pos: number) { + if (this.type === InputType.number) { + return ; + } + this.element.setSelectionRange(pos, pos); + } + } +} \ No newline at end of file diff --git a/src/util/phaser-input-master/ts/InputField.ts b/src/util/phaser-input-master/ts/InputField.ts new file mode 100755 index 0000000..1738f9c --- /dev/null +++ b/src/util/phaser-input-master/ts/InputField.ts @@ -0,0 +1,565 @@ +module PhaserInput { + import Text = Phaser.Text; + + export enum ForceCase { + none, + lower, + upper + } + + export interface InputOptions extends Phaser.PhaserTextStyle { + x?: number; + y?: number; + placeHolder?: string; + fillAlpha?: number; + width?: number; + height?: number; + padding?: number; + borderWidth?: number; + borderColor?: string; + borderRadius?: number; + cursorColor?: string; + placeHolderColor?: string; + type?: InputType; + forceCase?: ForceCase; + min?: string; + max?: string; + textAlign?: string; + selectionColor?: string; + zoom?: boolean; + } + + export class InputField extends Phaser.Sprite { + public focusOutOnEnter: boolean = true; + + private placeHolder:Phaser.Text = null; + + private box: InputBox = null; + + private textMask: TextMask; + + private focus:boolean = false; + + private cursor:Phaser.Text; + + private text:Phaser.Text; + + private offscreenText: Phaser.Text; + + public value:string = ''; + + private inputOptions: InputOptions; + + private domElement: InputElement; + + private selection: SelectionHighlight; + + private windowScale: number = 1; + + public blockInput: boolean = true; + + public focusIn: Phaser.Signal = new Phaser.Signal(); + + public focusOut: Phaser.Signal = new Phaser.Signal(); + + get width(): number { + return this.inputOptions.width; + } + + set width(width: number) { + this.inputOptions.width = width; + this.box.resize(width); + this.textMask.resize(width); + this.updateTextAlignment(); + } + + constructor(game:Phaser.Game, x:number, y:number, inputOptions:InputOptions = {}) { + super(game, x, y); + + //Parse the options + this.inputOptions = inputOptions; + this.inputOptions.width = (typeof inputOptions.width === 'number') ? inputOptions.width : 150; + this.inputOptions.padding = (typeof inputOptions.padding === 'number') ? inputOptions.padding : 0; + this.inputOptions.textAlign = inputOptions.textAlign || 'left'; + this.inputOptions.type = inputOptions.type || InputType.text; + this.inputOptions.forceCase = (inputOptions.forceCase) ? inputOptions.forceCase : ForceCase.none; + this.inputOptions.borderRadius = (typeof inputOptions.borderRadius === 'number') ? inputOptions.borderRadius : 0; + this.inputOptions.height = (typeof inputOptions.height === 'number') ? inputOptions.height : 14; + this.inputOptions.fillAlpha = (inputOptions.fillAlpha === undefined) ? 1 : inputOptions.fillAlpha; + this.inputOptions.selectionColor = inputOptions.selectionColor || 'rgba(179, 212, 253, 0.8)'; + this.inputOptions.zoom = (!game.device.desktop) ? inputOptions.zoom || false : false; + + //create the input box + this.box = new InputBox(this.game, inputOptions); + this.setTexture(this.box.generateTexture()); + + //create the mask that will be used for the texts + this.textMask = new TextMask(this.game, inputOptions); + this.addChild(this.textMask); + + //Create the hidden dom elements + this.domElement = new InputElement(this.game, 'phaser-input-' + (Math.random() * 10000 | 0).toString(), + this.inputOptions.type, this.value, this.focusIn, this.focusOut); + this.domElement.setMax(this.inputOptions.max, this.inputOptions.min); + + this.selection = new SelectionHighlight(this.game, this.inputOptions); + this.selection.mask = this.textMask; + this.addChild(this.selection); + + if (inputOptions.placeHolder && inputOptions.placeHolder.length > 0) { + this.placeHolder = new Phaser.Text(game, this.inputOptions.padding, this.inputOptions.padding, + inputOptions.placeHolder, { + font: inputOptions.font || '14px Arial', + fontWeight: inputOptions.fontWeight || 'normal', + fill: inputOptions.placeHolderColor || '#bfbebd' + }); + this.placeHolder.mask = this.textMask; + this.addChild(this.placeHolder); + } + + this.cursor = new Phaser.Text(game, this.inputOptions.padding, this.inputOptions.padding - 2, '|', { + font: inputOptions.font || '14px Arial', + fontWeight: inputOptions.fontWeight || 'normal', + fill: inputOptions.cursorColor || '#000000' + }); + this.cursor.visible = false; + this.addChild(this.cursor); + + this.text = new Phaser.Text(game, this.inputOptions.padding, this.inputOptions.padding, '', { + font: inputOptions.font || '14px Arial', + fontWeight: inputOptions.fontWeight || 'normal', + fill: inputOptions.fill || '#000000' + }); + this.text.mask = this.textMask; + this.addChild(this.text); + + this.offscreenText = new Phaser.Text(game, this.inputOptions.padding, this.inputOptions.padding, '', { + font: inputOptions.font || '14px Arial', + fontWeight: inputOptions.fontWeight || 'normal', + fill: inputOptions.fill || '#000000' + }); + + this.updateTextAlignment(); + + this.inputEnabled = true; + this.input.useHandCursor = true; + + this.game.input.onDown.add(this.checkDown, this); + this.focusOut.add((): void => { + if (PhaserInput.KeyboardOpen) { + this.endFocus(); + if (this.inputOptions.zoom) { + this.zoomOut(); + } + } + }); + } + + private updateTextAlignment(): void { + switch (this.inputOptions.textAlign) { + case 'left': + this.text.anchor.set(0, 0); + this.text.x = this.inputOptions.padding; + if (null !== this.placeHolder) { + this.placeHolder.anchor.set(0, 0); + } + this.cursor.x = this.inputOptions.padding + this.getCaretPosition(); + break; + case 'center': + this.text.anchor.set(0.5, 0); + this.text.x = this.inputOptions.padding + this.inputOptions.width / 2; + if (null !== this.placeHolder) { + this.placeHolder.anchor.set(0.5, 0); + this.placeHolder.x = this.inputOptions.padding + this.inputOptions.width / 2; + } + this.cursor.x = this.inputOptions.padding + this.inputOptions.width / 2 - this.text.width / 2 + this.getCaretPosition(); + break; + case 'right': + this.text.anchor.set(1, 0); + this.text.x = this.inputOptions.padding + this.inputOptions.width; + if (null !== this.placeHolder) { + this.placeHolder.anchor.set(1, 0); + this.placeHolder.x = this.inputOptions.padding + this.inputOptions.width; + } + this.cursor.x = this.inputOptions.padding + this.inputOptions.width; + break; + } + } + + /** + * This is a generic input down handler for the game. + * if the input object is clicked, we gain focus on it and create the dom element + * + * If there was focus on the element previously, but clicked outside of it, the element will loose focus + * and no keyboard events will be registered anymore + * + * @param e Phaser.Pointer + */ + private checkDown(e: Phaser.Pointer): void + { + if(!this.value){ + this.resetText(); + } + if (this.input.checkPointerOver(e)) { + if (this.focus) { + this.setCaretOnclick(e); + return; + } + + if (this.inputOptions.zoom && !PhaserInput.Zoomed) { + this.zoomIn(); + } + this.startFocus(); + } else { + if (this.focus === true) { + this.endFocus(); + if (this.inputOptions.zoom) { + this.zoomOut(); + } + } + } + } + + /** + * Update function makes the cursor blink, it uses two private properties to make it toggle + * + * @returns {number} + */ + private blink:boolean = true; + private cnt: number = 0; + public update() { + this.text.update(); + if (this.placeHolder) { + this.placeHolder.update(); + } + if (!this.focus) { + return; + } + + if (this.cnt !== 30) { + return this.cnt++; + } + + this.cursor.visible = this.blink; + this.blink = !this.blink; + this.cnt = 0; + } + + /** + * Focus is lost on the input element, we disable the cursor and remove the hidden input element + */ + public endFocus() { + if(!this.focus){ + return; + } + + this.domElement.removeEventListener(); + + if(this.blockInput === true) { + this.domElement.unblockKeyDownEvents(); + } + + this.focus = false; + if (this.value.length === 0 && null !== this.placeHolder) { + this.placeHolder.visible = true; + } + this.cursor.visible = false; + + if (this.game.device.desktop) { + //Timeout is a chrome hack + setTimeout(() => { + this.domElement.blur(); + }, 0); + } else { + this.domElement.blur(); + } + + if (!this.game.device.desktop) { + PhaserInput.KeyboardOpen = false; + PhaserInput.onKeyboardClose.dispatch(); + } + } + + /** + * + */ + public startFocus() { + this.focus = true; + + if (null !== this.placeHolder) { + this.placeHolder.visible = false; + } + + if (this.game.device.desktop) { + //Timeout is a chrome hack + setTimeout(() => { + this.keyUpProcessor(); + }, 0); + } else { + this.keyUpProcessor(); + } + + if (!this.game.device.desktop) { + PhaserInput.KeyboardOpen = true; + PhaserInput.onKeyboardOpen.dispatch(); + } + } + + private keyUpProcessor():void { + this.domElement.addKeyUpListener(this.keyListener.bind(this)); + this.domElement.focus(); + + if(this.blockInput === true) { + this.domElement.blockKeyDownEvents(); + } + } + + /** + * Update the text value in the box, and make sure the cursor is positioned correctly + */ + private updateText() + { + var text: string = ''; + if (this.inputOptions.type === InputType.password) { + for (let i = 0; i < this.value.length; i++) { + text += '*'; + } + }else if (this.inputOptions.type === InputType.number) { + var val = parseInt(this.value); + if (val < parseInt(this.inputOptions.min)) { + text = this.value = this.domElement.value = this.inputOptions.min; + } else if (val > parseInt(this.inputOptions.max)) { + text = this.value = this.domElement.value = this.inputOptions.max; + } else { + text = this.value; + } + } else { + text = this.value; + } + + this.text.setText(text); + + if (this.text.width > this.inputOptions.width) { + this.text.anchor.x = 1; + this.text.x = this.inputOptions.padding + this.inputOptions.width; + } else { + switch (this.inputOptions.textAlign) { + case 'left': + this.text.anchor.set(0, 0); + this.text.x = this.inputOptions.padding; + break; + case 'center': + this.text.anchor.set(0.5, 0); + this.text.x = this.inputOptions.padding + this.inputOptions.width / 2; + break; + case 'right': + this.text.anchor.set(1, 0); + this.text.x = this.inputOptions.padding + this.inputOptions.width; + break; + } + } + } + + /** + * Updates the position of the caret in the phaser input field + */ + private updateCursor() { + if (this.text.width > this.inputOptions.width || this.inputOptions.textAlign === 'right') { + this.cursor.x = this.inputOptions.padding + this.inputOptions.width; + } else { + switch (this.inputOptions.textAlign) { + case 'left': + this.cursor.x = this.inputOptions.padding + this.getCaretPosition(); + break; + case 'center': + this.cursor.x = this.inputOptions.padding + this.inputOptions.width / 2 - this.text.width / 2 + this.getCaretPosition(); + break; + } + } + } + + /** + * Fetches the carrot position from the dom element. This one changes when you use the keyboard to navigate the element + * + * @returns {number} + */ + private getCaretPosition() { + var caretPosition: number = this.domElement.getCaretPosition(); + if (-1 === caretPosition) { + return this.text.width; + } + + var text = this.value; + if (this.inputOptions.type === InputType.password) { + text = ''; + for (let i = 0; i < this.value.length; i++) { + text += '*'; + } + } + + this.offscreenText.setText(text.slice(0, caretPosition)); + + return this.offscreenText.width; + } + + /** + * Set the caret when a click was made in the input field + * + * @param e + */ + private setCaretOnclick(e: Phaser.Pointer) { + var localX: number = (this.text.toLocal(new PIXI.Point(e.x, e.y), this.game.world)).x; + if (this.inputOptions.textAlign && this.inputOptions.textAlign === 'center') { + localX += this.text.width / 2; + } + + var characterWidth: number = this.text.width / this.value.length; + var index: number = 0; + for (let i: number = 0; i < this.value.length; i++) { + if (localX >= i * characterWidth && localX <= (i + 1) * characterWidth) { + index = i; + break; + } + } + + if (localX > (this.value.length - 1) * characterWidth) { + index = this.value.length; + } + + this.startFocus(); + + this.domElement.setCaretPosition(index); + + this.updateCursor(); + } + + /** + * This checks if a select has been made, and if so highlight it with blue + */ + private updateSelection(): void { + if (this.domElement.hasSelection) { + var text = this.value; + if (this.inputOptions.type === InputType.password) { + text = ''; + for (let i = 0; i < this.value.length; i++) { + text += '*'; + } + } + text = text.substring(this.domElement.caretStart, this.domElement.caretEnd); + this.offscreenText.setText(text); + + this.selection.updateSelection(this.offscreenText.getBounds()); + + switch (this.inputOptions.textAlign) { + case 'left': + this.selection.x = this.inputOptions.padding; + break; + case 'center': + this.selection.x = this.inputOptions.padding + this.inputOptions.width / 2 - this.text.width / 2; + break; + } + } else { + this.selection.clear(); + } + } + + private zoomIn(): void { + if (PhaserInput.Zoomed) { + return; + } + + let bounds: PIXI.Rectangle = this.getBounds(); + if (window.innerHeight > window.innerWidth) { + this.windowScale = this.game.width / (bounds.width * 1.5); + } else { + this.windowScale = (this.game.width / 2) / (bounds.width * 1.5); + } + + let offsetX: number = ((this.game.width - bounds.width * 1.5) / 2) / this.windowScale; + this.game.world.scale.set(this.game.world.scale.x * this.windowScale, this.game.world.scale.y * this.windowScale); + this.game.world.pivot.set(bounds.x - offsetX, bounds.y - this.inputOptions.padding * 2); + PhaserInput.Zoomed = true; + } + + private zoomOut(): void { + if (!PhaserInput.Zoomed) { + return; + } + + this.game.world.scale.set(this.game.world.scale.x / this.windowScale, this.game.world.scale.y / this.windowScale); + this.game.world.pivot.set(0, 0); + PhaserInput.Zoomed = false; + } + + /** + * Event fired when a key is pressed, it takes the value from the hidden input field and adds it as its own + */ + private keyListener(evt: KeyboardEvent) + { + this.value = this.getFormattedText(this.domElement.value); + if (evt.keyCode === 13) { + if(this.focusOutOnEnter) { + this.endFocus(); + } + return; + } + + this.updateText(); + this.updateCursor(); + this.updateSelection(); + + evt.preventDefault(); + } + + /** + * We overwrite the destroy method because we want to delete the (hidden) dom element when the inputField was removed + */ + public destroy(destroyChildren?: boolean) { + this.game.input.onDown.remove(this.checkDown, this); + this.focusIn.removeAll(); + this.focusOut.removeAll(); + this.domElement.destroy(); + + super.destroy(destroyChildren); + } + + /** + * Resets the text to an empty value + */ + public resetText() { + this.setText(); + } + + public setText(text: string = ''): void { + if (null !== this.placeHolder) { + if (text.length > 0) { + this.placeHolder.visible = false; + } else { + this.placeHolder.visible = true; + } + } + + this.value = this.getFormattedText(text); + this.domElement.value = this.value; + this.updateText(); + this.updateCursor(); + this.endFocus(); + } + + /** + * Returns text formatted by rules stated in inputOptions + * @param text + */ + private getFormattedText(text: string): string { + switch (this.inputOptions.forceCase) { + default: + case ForceCase.none: + return text; + case ForceCase.lower: + return text.toLowerCase(); + case ForceCase.upper: + return text.toUpperCase(); + } + } + } +} diff --git a/src/util/phaser-input-master/ts/Objects/InputBox.ts b/src/util/phaser-input-master/ts/Objects/InputBox.ts new file mode 100755 index 0000000..1ab6ff0 --- /dev/null +++ b/src/util/phaser-input-master/ts/Objects/InputBox.ts @@ -0,0 +1,56 @@ +module PhaserInput { + export class InputBox extends Phaser.Graphics { + private bgColor: number; + private borderRadius: number; + private borderColor: number; + private borderWidth: number; + private boxAlpha: number; + private boxHeight: number; + private padding: number; + private boxWidth: number; + + constructor(game: Phaser.Game, inputOptions: InputOptions) { + super(game, 0, 0); + + this.bgColor = (inputOptions.backgroundColor) ? parseInt(inputOptions.backgroundColor.slice(1), 16) : 0xffffff; + this.borderRadius = inputOptions.borderRadius || 0; + this.borderWidth = inputOptions.borderWidth || 1; + this.borderColor = (inputOptions.borderColor) ? parseInt(inputOptions.borderColor.slice(1), 16) : 0x959595; + this.boxAlpha = inputOptions.fillAlpha; + this.padding = inputOptions.padding; + + var height: number = inputOptions.height; + var width: number = inputOptions.width; + + var height: number; + if (inputOptions.font) { + //fetch height from font; + height = Math.max(parseInt(inputOptions.font.substr(0, inputOptions.font.indexOf('px')), 10), height); + } + + this.boxHeight = this.padding * 2 + height; + var width = inputOptions.width; + this.boxWidth = this.padding * 2 + width; + + this.drawBox(); + } + + public resize(newWidth: number): void { + this.boxWidth = this.padding * 2 + newWidth; + + this.drawBox(); + } + + private drawBox(): void { + this.clear() + .beginFill(this.bgColor, this.boxAlpha) + .lineStyle(this.borderWidth, this.borderColor, this.boxAlpha); + + if (this.borderRadius > 0) { + this.drawRoundedRect(0, 0, this.boxWidth, this.boxHeight, this.borderRadius); + } else { + this.drawRect(0, 0, this.boxWidth, this.boxHeight); + } + } + } +} \ No newline at end of file diff --git a/src/util/phaser-input-master/ts/Objects/SelectionHighlight.ts b/src/util/phaser-input-master/ts/Objects/SelectionHighlight.ts new file mode 100755 index 0000000..637664e --- /dev/null +++ b/src/util/phaser-input-master/ts/Objects/SelectionHighlight.ts @@ -0,0 +1,25 @@ +module PhaserInput { + export class SelectionHighlight extends Phaser.Graphics { + private inputOptions: InputOptions; + + constructor(game: Phaser.Game, inputOptions: InputOptions) { + super(game, inputOptions.padding, inputOptions.padding); + + this.inputOptions = inputOptions; + } + + public updateSelection(rect: PIXI.Rectangle): void { + var color = Phaser.Color.webToColor(this.inputOptions.selectionColor); + + this.clear(); + this.beginFill(SelectionHighlight.rgb2hex(color), color.a); + this.drawRect(rect.x, rect.y, rect.width, rect.height - this.inputOptions.padding); + } + + public static rgb2hex(color: {r: number, g: number, b: number, a: number}): number { + return parseInt(("0" + color.r.toString(16)).slice(-2) + + ("0" + color.g.toString(16)).slice(-2) + + ("0" + color.b.toString(16)).slice(-2), 16); + } + } +} \ No newline at end of file diff --git a/src/util/phaser-input-master/ts/Objects/TextMask.ts b/src/util/phaser-input-master/ts/Objects/TextMask.ts new file mode 100755 index 0000000..70b864e --- /dev/null +++ b/src/util/phaser-input-master/ts/Objects/TextMask.ts @@ -0,0 +1,32 @@ +module PhaserInput { + export class TextMask extends Phaser.Graphics { + private maskWidth: number; + private maskHeight: number; + + constructor(game: Phaser.Game, inputOptions: InputOptions) { + super(game, inputOptions.padding, inputOptions.padding); + + var height = inputOptions.height; + + if (inputOptions.font) { + //fetch height from font; + height = Math.max(parseInt(inputOptions.font.substr(0, inputOptions.font.indexOf('px')), 10), height); + } + this.maskWidth = inputOptions.width; + this.maskHeight = height * 1.3; + this.drawMask(); + } + + public resize(newWidth: number): void { + this.maskWidth = newWidth; + this.drawMask(); + } + + private drawMask(): void { + this.clear() + .beginFill(0x000000) + .drawRect(0, 0, this.maskWidth, this.maskHeight) + .endFill(); + } + } +} \ No newline at end of file diff --git a/src/util/phaser-input-master/ts/Plugin.ts b/src/util/phaser-input-master/ts/Plugin.ts new file mode 100755 index 0000000..3f6900c --- /dev/null +++ b/src/util/phaser-input-master/ts/Plugin.ts @@ -0,0 +1,53 @@ +module PhaserInput { + export var Zoomed: boolean = false; + export var KeyboardOpen: boolean = false; + export const onKeyboardOpen: Phaser.Signal = new Phaser.Signal(); + export const onKeyboardClose: Phaser.Signal = new Phaser.Signal() + + export interface InputFieldObjectFactory extends Phaser.GameObjectFactory { + inputField: (x: number, y: number, inputOptions?: PhaserInput.InputOptions, group?: Phaser.Group) => PhaserInput.InputField; + } + + export interface InputFieldObjectCreator extends Phaser.GameObjectCreator { + inputField: (x: number, y: number, inputOptions?: PhaserInput.InputOptions) => PhaserInput.InputField; + } + + export interface InputFieldGame extends Phaser.Game { + add: InputFieldObjectFactory; + make: InputFieldObjectCreator; + } + + export class Plugin extends Phaser.Plugin { + public static Zoomed: boolean = false; + public static KeyboardOpen: boolean = false; + public static onKeyboardOpen: Phaser.Signal = new Phaser.Signal(); + public static onKeyboardClose: Phaser.Signal = new Phaser.Signal(); + + constructor(game: Phaser.Game, parent: Phaser.PluginManager) { + super(game, parent); + + this.addInputFieldFactory(); + } + + /** + * Extends the GameObjectFactory prototype with the support of adding InputField. this allows us to add InputField methods to the game just like any other object: + * game.add.InputField(); + */ + private addInputFieldFactory() { + (Phaser.GameObjectFactory.prototype).inputField = function (x: number, y: number, inputOptions: PhaserInput.InputOptions, group?: Phaser.Group): PhaserInput.InputField { + if (group === undefined) { + group = this.world; + } + + var nineSliceObject = new PhaserInput.InputField(this.game, x, y, inputOptions); + + return group.add(nineSliceObject); + }; + + (Phaser.GameObjectCreator.prototype).inputField = function (x: number, y: number, inputOptions: PhaserInput.InputOptions): PhaserInput.InputField { + return new PhaserInput.InputField(this.game, x, y, inputOptions); + }; + } + + } +} diff --git a/src/util/phaser-input-master/ts/definitions.d.ts b/src/util/phaser-input-master/ts/definitions.d.ts new file mode 100755 index 0000000..fe7d469 --- /dev/null +++ b/src/util/phaser-input-master/ts/definitions.d.ts @@ -0,0 +1,2 @@ +/// +/// \ No newline at end of file diff --git a/src/util/phaser-input-master/tslint.json b/src/util/phaser-input-master/tslint.json new file mode 100755 index 0000000..0a60655 --- /dev/null +++ b/src/util/phaser-input-master/tslint.json @@ -0,0 +1,131 @@ +{ + "rules": { + "align": [ + true, + "parameters", + "statements" + ], + "ban": false, + "class-name": true, + "curly": true, + "eofline": true, + "forin": true, + "indent": [ + true, + "spaces" + ], + "interface-name": true, + "jsdoc-format": true, + "label-position": true, + "label-undefined": true, + "max-line-length": [ + true, + 200 + ], + "member-access": true, + "no-any": false, + "no-arg": true, + "no-conditional-assignment": true, + "no-consecutive-blank-lines": true, + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-construct": true, + "no-constructor-vars": true, + "no-debugger": true, + "no-duplicate-key": true, + "no-duplicate-variable": true, + "no-empty": true, + "no-eval": true, + "no-inferrable-types": false, + "no-internal-module": false, + "no-null-keyword": false, + "no-require-imports": true, + "no-shadowed-variable": true, + "no-string-literal": false, + "no-switch-case-fall-through": true, + "no-trailing-whitespace": true, + "no-unreachable": true, + "no-unused-expression": true, + "no-unused-variable": true, + "no-use-before-declare": true, + "no-var-keyword": true, + "no-var-requires": true, + "object-literal-sort-keys": false, + "one-line": [ + true, + "check-open-brace", + "check-catch", + "check-else", + "check-finally", + "check-whitespace" + ], + "quotemark": [ + true, + "single", + "avoid-escape" + ], + "radix": true, + "semicolon": [ + true, + "always" + ], + "switch-default": true, + "trailing-comma": [ + true, + { + "multiline": "never", + "singleline": "never" + } + ], + "triple-equals": [ + true, + "allow-null-check" + ], + "typedef": [ + true, + "call-signature", + "parameter", + "arrow-parameter", + "property-declaration", + "variable-declaration", + "member-variable-declaration" + ], + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }, + { + "call-signature": "onespace", + "index-signature": "onespace", + "parameter": "onespace", + "property-declaration": "onespace", + "variable-declaration": "onespace" + } + ], + "use-strict": false, + "variable-name": [ + true, + "allow-leading-underscore", + "ban-keywords" + ], + "whitespace": [ + true, + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type" + ] + } +} \ No newline at end of file