From c963103af3d7f971510a579c82b184cdfa1eb099 Mon Sep 17 00:00:00 2001 From: Nicolai Mortensen Date: Tue, 8 Aug 2017 23:07:36 +0200 Subject: [PATCH] cancel click events if dragging using "dragThreshold" --- bin/pixi-ui.js | 29 +++++++------- bin/pixi-ui.js.map | 2 +- bin/pixi-ui.min.js | 8 ++-- bin/pixi-ui.min.js.map | 2 +- src/Button.js | 1 - src/Interaction/ClickEvent.js | 14 ++++++- test/button.html | 73 +++++++++++++++++++++++++++++++++++ 7 files changed, 108 insertions(+), 21 deletions(-) create mode 100644 test/button.html diff --git a/bin/pixi-ui.js b/bin/pixi-ui.js index e72b091..39a0086 100644 --- a/bin/pixi-ui.js +++ b/bin/pixi-ui.js @@ -1,6 +1,6 @@ /*! * pixi-ui - v1.0.0 - * Compiled Sat, 22 Jul 2017 09:46:15 UTC + * Compiled Tue, 08 Aug 2017 21:06:38 UTC * * pixi-ui is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license @@ -164,7 +164,6 @@ Object.defineProperties(Button.prototype, { * "blur" * "focus" * "focusChanged" param: [bool]isFocussed - * "change" param: [bool]isChecked * */ },{"./InputBase":11,"./Interaction/ClickEvent.js":12,"./Interaction/InputController":15}],3:[function(require,module,exports){ @@ -2038,11 +2037,17 @@ var ClickEvent = function (obj) { var bound = false, self = this, id = 0, - ishover = false; + ishover = false, + mouse = new PIXI.Point(), + offset = new PIXI.Point(), + movementX = 0, + movementY = 0; + obj.container.interactive = true; var _onMouseDown = function (event) { + mouse.copy(event.data.global); id = event.data.identifier; self.onPress.call(obj, event, true); if (!bound) { @@ -2056,6 +2061,7 @@ var ClickEvent = function (obj) { var _mouseUpAll = function (event) { if (event.data.identifier !== id) return; + offset.set(event.data.global.x - mouse.x, event.data.global.y - mouse.y); if (bound) { obj.container.removeListener('mouseup', _onMouseUp); obj.container.removeListener('mouseupoutside', _onMouseUpOutside); @@ -2069,6 +2075,11 @@ var ClickEvent = function (obj) { var _onMouseUp = function (event) { if (event.data.identifier !== id) return; _mouseUpAll(event); + + movementX = Math.abs(offset.x); + movementY = Math.abs(offset.y); + if (Math.max(movementX, movementY) > obj.dragThreshold) return; + self.onClick.call(obj, event); }; @@ -4972,18 +4983,10 @@ UIBase.prototype.updatesettings = function (updateChildren, updateParent) { } } - if (updateParent) - this.updateParent(); - + if (updateParent) this.updateParent(); this.baseupdate(); this.update(); - - if (updateChildren) - this.updateChildren(); - - - - + if (updateChildren) this.updateChildren(); }; /** diff --git a/bin/pixi-ui.js.map b/bin/pixi-ui.js.map index aab106d..3173955 100644 --- a/bin/pixi-ui.js.map +++ b/bin/pixi-ui.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/emoji-regex/index.js","src/Button.js","src/CheckBox.js","src/Container.js","src/DynamicText/DynamicChar.js","src/DynamicText/DynamicText.js","src/DynamicText/DynamicTextStyle.js","src/Ease/Ease.js","src/Ease/EaseBase.js","src/Ease/ExponentialEase.js","src/InputBase.js","src/Interaction/ClickEvent.js","src/Interaction/DragDropController.js","src/Interaction/DragEvent.js","src/Interaction/InputController.js","src/Interaction/Interaction.js","src/Interaction/MouseScrollEvent.js","src/MathHelper.js","src/ScrollBar.js","src/ScrollingContainer.js","src/SliceSprite.js","src/Slider.js","src/SortableList.js","src/Sprite.js","src/Stage.js","src/Text.js","src/TextInput.js","src/Ticker.js","src/TilingSprite.js","src/Tween.js","src/UI.js","src/UIBase.js","src/UISettings.js","src"],"names":[],"mappings":";;;;;;;AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACl/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC50BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACplCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi-ui.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o renderCount) {\r\n for (i = renderCount; i < spriteCache.length; i++) {\r\n var removeSprite = spriteCache[i];\r\n if (removeSprite)\r\n removeSprite.visible = false;\r\n }\r\n }\r\n\r\n var char, lineWidth = 0, lineHeight = 0, maxLineWidth = 0;\r\n\r\n for (i = 0; i < renderCount; i++) {\r\n char = renderChars[i];\r\n\r\n //get line data\r\n if (currentLine !== char.lineIndex) {\r\n currentLine = char.lineIndex;\r\n lineWidth = lineWidthData[currentLine];\r\n lineHeight = lineHeightData[currentLine];\r\n yOffset += lineHeight;\r\n\r\n\r\n\r\n switch (lineAlignmentData[currentLine]) {\r\n case 'right': xOffset = this._width - lineWidth; break;\r\n case 'center': xOffset = (this._width - lineWidth) * 0.5; break;\r\n default: xOffset = 0;\r\n }\r\n\r\n\r\n maxLineWidth = Math.max(lineWidth, maxLineWidth);\r\n }\r\n\r\n //no reason to render a blank space or 0x0 letters (no texture created)\r\n if (!char.data.texture || char.space || char.newline) {\r\n if (spriteCache[i])\r\n spriteCache[i].visible = false;\r\n continue;\r\n }\r\n\r\n\r\n //add new sprite\r\n var tex = char.data.texture, sprite = spriteCache[i];\r\n\r\n\r\n\r\n if (!sprite) {\r\n sprite = spriteCache[i] = new PIXI.Sprite(tex);\r\n sprite.anchor.set(0.5);\r\n }\r\n else\r\n sprite.texture = tex;\r\n\r\n\r\n\r\n sprite.visible = true;\r\n sprite.x = char.x + xOffset + tex.width * 0.5;\r\n sprite.y = char.y + yOffset - tex.height * 0.5 - (lineHeight - lineFontSizeData[currentLine]);\r\n\r\n\r\n sprite.tint = char.emoji ? 0xffffff : hexToInt(char.style.tint, 0xffffff);\r\n sprite.rotation = float(char.style.rotation, 0);\r\n sprite.skew.x = float(char.style.skew, 0);\r\n\r\n if (!sprite.parent)\r\n charContainer.addChild(sprite);\r\n }\r\n\r\n if (autoWidth) this.width = maxLineWidth;\r\n if (autoHeight) this.height = yOffset;\r\n };\r\n\r\n //updates the renderChar array and position chars for render\r\n this.prepareForRender = function () {\r\n var pos = new PIXI.Point(),\r\n wordIndex = 0,\r\n lineHeight = 0,\r\n lineFontSize = 0,\r\n lineIndex = 0,\r\n lineAlignment = defaultStyle.align,\r\n lastSpaceIndex = -1,\r\n lastSpaceLineWidth = 0,\r\n textHeight = 0,\r\n forceNewline = false,\r\n style,\r\n renderIndex = 0,\r\n ellipsis = false,\r\n lineFull = false,\r\n i;\r\n\r\n\r\n\r\n\r\n for (i = 0; i < charCount; i++) {\r\n var char = chars[i], lastChar = chars[i - 1];\r\n style = char.style;\r\n\r\n\r\n //lineheight\r\n lineHeight = Math.max(lineHeight, defaultStyle.lineHeight || style.lineHeight || char.data.lineHeight);\r\n\r\n if (style.overflowY !== 'visible' && lineHeight + textHeight > this._height) {\r\n if (style.overflowY === 'hidden')\r\n break;\r\n\r\n }\r\n\r\n if (char.newline)\r\n lineFull = false;\r\n\r\n\r\n //set word index\r\n if (char.space || char.newline) wordIndex++;\r\n else char.wordIndex = wordIndex;\r\n\r\n //textheight\r\n lineFontSize = Math.max(lineFontSize, style.fontSize);\r\n\r\n //lineindex\r\n char.lineIndex = lineIndex;\r\n\r\n //lineAlignment\r\n if (style.align !== defaultStyle.align) lineAlignment = style.align;\r\n\r\n\r\n if (char.space) {\r\n lastSpaceIndex = i;\r\n lastSpaceLineWidth = pos.x;\r\n }\r\n\r\n\r\n var size = Math.round(char.data.width) + float(style.letterSpacing, 0);\r\n if (!autoWidth && !forceNewline && !char.newline && pos.x + size > this._width) {\r\n if (style.wrap) {\r\n if (char.space) {\r\n forceNewline = true;\r\n }\r\n else if (lastSpaceIndex !== -1) {\r\n renderIndex -= i - lastSpaceIndex;\r\n i = lastSpaceIndex - 1;\r\n lastSpaceIndex = -1;\r\n pos.x = lastSpaceLineWidth;\r\n forceNewline = true;\r\n continue;\r\n\r\n }\r\n else if (style.breakWords) {\r\n if (lastChar) {\r\n pos.x -= lastChar.style.letterSpacing;\r\n pos.x -= lastChar.data.width;\r\n }\r\n i -= 2;\r\n renderIndex--;\r\n forceNewline = true;\r\n continue;\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n if (style.overflowX == 'hidden' && !forceNewline) {\r\n lineFull = true;\r\n if (style.ellipsis && !ellipsis) {\r\n ellipsis = true;\r\n var ellipsisData = lineEllipsisData[lineIndex];\r\n if (!ellipsisData) ellipsisData = lineEllipsisData[lineIndex] = [new DynamicChar(), new DynamicChar(), new DynamicChar()];\r\n for (var d = 0; d < 3; d++) {\r\n var dot = ellipsisData[d];\r\n dot.value = \".\";\r\n dot.data = atlas.getCharObject(dot.value, style);\r\n dot.style = style;\r\n dot.x = pos.x + char.data.xOffset;\r\n dot.y = parseFloat(style.verticalAlign) + dot.data.yOffset;\r\n dot.lineIndex = lineIndex;\r\n pos.x += Math.round(dot.data.width) + float(style.letterSpacing, 0);\r\n renderChars[renderIndex] = dot;\r\n renderIndex++;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n //Update position and add to renderchars\r\n if (!lineFull) {\r\n //position\r\n char.x = pos.x + char.data.xOffset;\r\n char.y = parseFloat(style.verticalAlign) + char.data.yOffset;\r\n pos.x += size;\r\n renderChars[renderIndex] = char;\r\n renderIndex++;\r\n }\r\n\r\n\r\n\r\n //new line\r\n if (forceNewline || char.newline || i === charCount - 1) {\r\n if (lastChar) {\r\n pos.x -= lastChar.style.letterSpacing;\r\n if (lastChar.space) pos.x -= lastChar.data.width;\r\n }\r\n\r\n if (char.space) {\r\n pos.x -= char.data.width;\r\n pos.x -= float(style.letterSpacing, 0);\r\n }\r\n\r\n textHeight += lineHeight;\r\n lineHasEllipsis[lineIndex] = ellipsis;\r\n lineWidthData[lineIndex] = pos.x;\r\n lineHeightData[lineIndex] = lineHeight;\r\n lineFontSizeData[lineIndex] = lineFontSize;\r\n lineAlignmentData[lineIndex] = lineAlignment;\r\n\r\n\r\n //reset line vaules\r\n lineHeight = pos.x = lastSpaceLineWidth = lineFontSize = 0;\r\n lineAlignment = defaultStyle.align;\r\n lastSpaceIndex = -1;\r\n lineIndex++;\r\n forceNewline = lineFull = ellipsis = false;\r\n\r\n }\r\n\r\n }\r\n\r\n renderCount = renderIndex;\r\n };\r\n\r\n //phrases the input text and prepares the char array\r\n var closeTags = ['', '', '', ''];\r\n this.processInputText = function () {\r\n var styleTree = [defaultStyle],\r\n charIndex = 0,\r\n inputTextIndex = 0,\r\n inputArray = Array.from(this._inputText);\r\n\r\n for (var i = 0; i < inputArray.length; i++) {\r\n style = styleTree[styleTree.length - 1];\r\n var c = inputArray[i],\r\n charcode = c.charCodeAt(0),\r\n newline = false,\r\n space = false,\r\n emoji = false;\r\n\r\n\r\n //Extract Tags\r\n if (/(?:\\r\\n|\\r|\\n)/.test(c))\r\n newline = true;\r\n else if (/(\\s)/.test(c))\r\n space = true;\r\n else if (options.allowTags && c === \"<\") {\r\n var tag = this._inputText.substring(inputTextIndex);\r\n tag = tag.slice(0, tag.indexOf(\">\") + 1);\r\n var FoundTag = true;\r\n if (tag.length) {\r\n if (tag === \"\") {\r\n style = style.clone();\r\n style.fontStyle = 'italic';\r\n styleTree.push(style);\r\n }\r\n else if (tag === \"\") {\r\n style = style.clone();\r\n style.fontWeight = 'bold';\r\n styleTree.push(style);\r\n }\r\n else if (tag === \"
\") {\r\n style = style.clone();\r\n style.align = 'center';\r\n styleTree.push(style);\r\n }\r\n else if (closeTags.indexOf(tag) !== -1) {\r\n if (styleTree.length > 1) styleTree.splice(styleTree.length - 1, 1);\r\n }\r\n else if (tag.startsWith(\"\\s]*)(?=\\s|\\/>))(?=[^<]*>)/g,\r\n match = regex.exec(tag);\r\n\r\n if (match !== null) {\r\n style = style.clone();\r\n while (match !== null) {\r\n switch (match[1]) {\r\n case 'family': match[1] = 'fontFamily'; break;\r\n case 'size': match[1] = 'fontSize'; break;\r\n case 'weight': match[1] = 'fontWeight'; break;\r\n case 'style': match[1] = 'fontStyle'; break;\r\n case 'valign': match[1] = 'verticalAlign'; break;\r\n case 'spacing': match[1] = 'letterSpacing'; break;\r\n case 'color': match[1] = 'tint'; break;\r\n\r\n }\r\n style[match[1]] = match[4];\r\n match = regex.exec(tag);\r\n }\r\n styleTree.push(style);\r\n }\r\n }\r\n else {\r\n FoundTag = false;\r\n }\r\n\r\n if (FoundTag) {\r\n inputTextIndex += tag.length;\r\n i += tag.length - 1;\r\n continue;\r\n }\r\n }\r\n }\r\n else {\r\n //detect emoji\r\n var emojiMatch = emojiRegex().exec(c);\r\n if (emojiMatch !== null) {\r\n i--; c = '';\r\n while (emojiMatch !== null && c !== emojiMatch[0]) {\r\n i++;\r\n c = emojiMatch[0];\r\n emojiMatch = emojiRegex().exec(c + inputArray[i + 1]);\r\n }\r\n emoji = true;\r\n }\r\n }\r\n\r\n\r\n //Prepare DynamicChar object\r\n var char = chars[charIndex];\r\n if (!char) {\r\n char = new DynamicChar();\r\n chars[charIndex] = char;\r\n }\r\n char.style = style;\r\n\r\n\r\n if (emoji) {\r\n char.style = char.style.clone();\r\n char.style.fontFamily = DynamicText.settings.defaultEmojiFont;\r\n }\r\n\r\n char.data = atlas.getCharObject(c, char.style);\r\n char.value = c;\r\n char.space = space;\r\n char.newline = newline;\r\n char.emoji = emoji;\r\n\r\n charIndex++;\r\n inputTextIndex += c.length;\r\n }\r\n charCount = charIndex;\r\n };\r\n\r\n //PIXIUI update, lazy update (bad solution needs rewrite when converted to pixi plugin)\r\n this.lazyUpdate = null;\r\n var self = this;\r\n this.update = function () {\r\n if (self.lazyUpdate !== null) return;\r\n self.lazyUpdate = setTimeout(function () {\r\n \r\n console.log(\"UPDATING TEXT\");\r\n var dirtySize = !autoWidth && (self._width != lastWidth || self._height != lastHeight || self.dirtyText);\r\n\r\n if (self.dirtyText || self.dirtyStyle) {\r\n self.dirtyText = self.dirtyStyle = false;\r\n self.dirtyRender = true; //force render after textchange\r\n self.processInputText();\r\n }\r\n\r\n if (dirtySize || self.dirtyRender) {\r\n self.dirtyRender = false;\r\n lastWidth = self._width;\r\n lastHeight = self.height;\r\n self.prepareForRender();\r\n self.render();\r\n }\r\n self.lazyUpdate = null;\r\n }, 0);\r\n\r\n };\r\n}\r\n\r\n\r\nDynamicText.prototype = Object.create(UIBase.prototype);\r\nDynamicText.prototype.constructor = DynamicText;\r\nmodule.exports = DynamicText;\r\nDynamicText.settings = {\r\n debugSpriteSheet: false,\r\n defaultEmojiFont: \"Segoe UI Emoji\" //force one font family for emojis so we dont rerender them multiple times\r\n};\r\n\r\nObject.defineProperties(DynamicText.prototype, {\r\n value: {\r\n get: function () {\r\n return this._inputText;\r\n },\r\n set: function (val) {\r\n if (val !== this._inputText) {\r\n this._inputText = val;\r\n this.dirtyText = true;\r\n this.update();\r\n console.log(\"Updating Text to: \" + val);\r\n }\r\n }\r\n },\r\n text: {\r\n get: function () {\r\n return this.value;\r\n },\r\n set: function (val) {\r\n \r\n this.value = val;\r\n }\r\n },\r\n style: {\r\n get: function () {\r\n return this._style;\r\n },\r\n set: function (val) {\r\n //get a clean default style\r\n var style = new DynamicTextStyle(this);\r\n\r\n //merge it with new style\r\n style.merge(val);\r\n\r\n //merge it onto this default style\r\n this._style.merge(style);\r\n\r\n this.dirtyStyle = true;\r\n this.update();\r\n }\r\n }\r\n});\r\n\r\n\r\n\r\n\r\n\r\n\r\n//Atlas\r\nvar metricsCanvas = document.createElement(\"canvas\");\r\nvar metricsContext = metricsCanvas.getContext(\"2d\");\r\nmetricsCanvas.width = 100;\r\nmetricsCanvas.height = 100;\r\n\r\n\r\nvar DynamicAtlas = function (padding) {\r\n var res = devicePixelRatio || 1,\r\n canvas,\r\n context,\r\n objects,\r\n newObjects = [],\r\n baseTexture,\r\n lazyTimeout,\r\n rootNode,\r\n canvasList = [],\r\n atlasdim,\r\n startdim = 256,\r\n maxdim = 2048;\r\n\r\n\r\n var AtlasNode = function (w, h) {\r\n var children = this.children = [];\r\n this.rect = new PIXI.Rectangle(0, 0, w || 0, h || 0);\r\n this.data = null;\r\n\r\n this.insert = function (width, height, obj) {\r\n if (children.length > 0) {\r\n var newNode = children[0].insert(width, height, obj);\r\n if (newNode !== null) return newNode;\r\n\r\n return children[1].insert(width, height, obj);\r\n } else {\r\n if (this.data !== null) return null;\r\n if (width > this.rect.width || height > this.rect.height) return null;\r\n if (width == this.rect.width && height == this.rect.height) {\r\n this.data = obj;\r\n obj.frame.x = this.rect.x;\r\n obj.frame.y = this.rect.y;\r\n return this;\r\n }\r\n\r\n children.push(new AtlasNode());\r\n children.push(new AtlasNode());\r\n\r\n var dw = this.rect.width - width;\r\n var dh = this.rect.height - height;\r\n\r\n if (dw > dh) {\r\n children[0].rect = new PIXI.Rectangle(this.rect.x, this.rect.y, width, this.rect.height);\r\n children[1].rect = new PIXI.Rectangle(this.rect.x + width, this.rect.y, this.rect.width - width, this.rect.height);\r\n } else {\r\n children[0].rect = new PIXI.Rectangle(this.rect.x, this.rect.y, this.rect.width, height);\r\n children[1].rect = new PIXI.Rectangle(this.rect.x, this.rect.y + height, this.rect.width, this.rect.height - height);\r\n }\r\n\r\n return children[0].insert(width, height, obj);\r\n }\r\n };\r\n };\r\n\r\n var addCanvas = function () {\r\n //create new canvas\r\n canvas = document.createElement(\"canvas\");\r\n context = canvas.getContext(\"2d\");\r\n canvasList.push(canvas);\r\n\r\n //reset dimentions\r\n atlasdim = startdim;\r\n canvas.width = canvas.height = atlasdim;\r\n rootNode = new AtlasNode(atlasdim, atlasdim);\r\n\r\n //reset array with canvas objects and create new atlas\r\n objects = [];\r\n\r\n //set new basetexture\r\n baseTexture = PIXI.BaseTexture.fromCanvas(canvas);\r\n baseTexture.mipmap = false; //if not, pixi bug resizing POW2\r\n baseTexture.resolution = 1; //todo: support all resolutions\r\n baseTexture.update();\r\n\r\n //Debug Spritesheet\r\n if (DynamicText.settings.debugSpriteSheet) {\r\n canvas.className = \"DynamicText_SpriteSheet\";\r\n document.body.appendChild(canvas);\r\n }\r\n\r\n };\r\n\r\n this.fontFamilyCache = {};\r\n\r\n var drawObjects = function (arr, resized) {\r\n if (resized) baseTexture.update();\r\n for (var i = 0; i < arr.length; i++)\r\n drawObject(arr[i]);\r\n };\r\n\r\n var drawObject = function (obj) {\r\n context.drawImage(obj._cache, obj.frame.x, obj.frame.y);\r\n obj.texture.frame = obj.frame;\r\n obj.texture.update();\r\n };\r\n\r\n this.getCharObject = function (char, style) {\r\n var font = style.ctxFont();\r\n\r\n //create new cache for fontFamily\r\n var familyCache = this.fontFamilyCache[font];\r\n if (!familyCache) {\r\n familyCache = {};\r\n this.fontFamilyCache[font] = familyCache;\r\n }\r\n\r\n\r\n\r\n //get char data\r\n var key = style.ctxKey(char);\r\n var obj = familyCache[key];\r\n if (!obj) {\r\n //create char object\r\n var metrics = generateCharData(char, style);\r\n\r\n\r\n\r\n //temp resize if doesnt fit (not nesseary when we dont need to generate textures)\r\n if (metrics.rect) {\r\n if (canvas.width < metrics.rect.width || canvas.height < metrics.rect.height) {\r\n canvas.width = canvas.height = Math.max(metrics.rect.width, metrics.rect.height);\r\n baseTexture.update();\r\n }\r\n }\r\n\r\n\r\n //todo: cleanup when we know whats needed\r\n obj = {\r\n metrics: metrics,\r\n font: font,\r\n value: char,\r\n frame: metrics.rect,\r\n baseTexture: metrics.rect ? baseTexture : null,\r\n xOffset: metrics.bounds ? metrics.bounds.minx : 0,\r\n yOffset: metrics.descent || 0,\r\n width: metrics.width || 0,\r\n lineHeight: metrics.lineHeight || 0,\r\n _cache: metrics.canvas,\r\n texture: metrics.rect ? new PIXI.Texture(baseTexture, metrics.rect) : null //temp texture\r\n };\r\n\r\n //add to collections\r\n familyCache[key] = obj;\r\n\r\n\r\n //add to atlas if visible char\r\n if (metrics.rect) {\r\n newObjects.push(obj);\r\n\r\n\r\n\r\n if (lazyTimeout === undefined)\r\n lazyTimeout = setTimeout(function () {\r\n addNewObjects();\r\n lazyTimeout = undefined;\r\n }, 0);\r\n\r\n }\r\n }\r\n\r\n return obj;\r\n };\r\n\r\n var compareFunction = function (a, b) {\r\n if (a.frame.height < b.frame.height)\r\n return 1;\r\n\r\n if (a.frame.height > b.frame.height)\r\n return -1;\r\n\r\n\r\n if (a.frame.width < b.frame.width)\r\n return 1;\r\n\r\n if (a.frame.width > b.frame.width)\r\n return -1;\r\n\r\n\r\n return 0;\r\n };\r\n\r\n var addNewObjects = function () {\r\n newObjects.sort(compareFunction);\r\n var _resized = false;\r\n var _newcanvas = false;\r\n\r\n for (var i = 0; i < newObjects.length; i++) {\r\n var obj = newObjects[i];\r\n var node = rootNode.insert(obj.frame.width + padding, obj.frame.height + padding, obj);\r\n\r\n if (node !== null) {\r\n if (_newcanvas) obj.texture.baseTexture = baseTexture; //update basetexture if new canvas was created (temp)\r\n objects.push(obj);\r\n continue;\r\n }\r\n\r\n //step one back (so it will be added after resize/new canvas)\r\n i--;\r\n\r\n if (atlasdim < maxdim) {\r\n _resized = true;\r\n resizeCanvas(atlasdim * 2);\r\n continue;\r\n }\r\n\r\n //close current spritesheet and make a new one\r\n drawObjects(objects, _resized);\r\n addCanvas();\r\n _newcanvas = true;\r\n _resized = false;\r\n }\r\n\r\n drawObjects(_resized || _newcanvas ? objects : newObjects, _resized);\r\n newObjects = [];\r\n };\r\n\r\n var resizeCanvas = function (dim) {\r\n canvas.width = canvas.height = atlasdim = dim;\r\n\r\n rootNode = new AtlasNode(dim, dim);\r\n objects.sort(compareFunction);\r\n\r\n for (var i = 0; i < objects.length; i++) {\r\n var obj = objects[i];\r\n rootNode.insert(obj.frame.width + padding, obj.frame.height + padding, obj);\r\n }\r\n };\r\n\r\n var generateCharData = function (char, style) {\r\n\r\n var fontSize = Math.max(1, int(style.fontSize, 26)),\r\n lineHeight = fontSize * 1.25;\r\n\r\n\r\n //Start our returnobject\r\n var data = {\r\n fontSize: fontSize,\r\n lineHeight: lineHeight,\r\n width: 0\r\n };\r\n\r\n //Return if newline\r\n if (!char || /(?:\\r\\n|\\r|\\n)/.test(char))\r\n return data;\r\n\r\n //Ctx font string\r\n var font = style.ctxFont();\r\n metricsContext.font = font;\r\n\r\n //Get char width\r\n data.width = Math.round(metricsContext.measureText(char).width);\r\n\r\n //Return if char = space\r\n if (/(\\s)/.test(char)) return data;\r\n\r\n //set canvas size (with padding so we can messure)\r\n var paddingY = Math.round(fontSize * 0.7), paddingX = Math.max(5, Math.round(fontSize * 0.7));\r\n metricsCanvas.width = Math.ceil(data.width) + paddingX * 2;\r\n metricsCanvas.height = 1.5 * fontSize;\r\n var w = metricsCanvas.width, h = metricsCanvas.height, baseline = (h / 2) + (paddingY * 0.5);\r\n\r\n //set font again after resize\r\n metricsContext.font = font;\r\n\r\n //make sure canvas is clean\r\n metricsContext.clearRect(0, 0, w, h);\r\n\r\n //save clean state with font\r\n metricsContext.save();\r\n\r\n //convert shadow string to shadow data\r\n var shadowData = function (str) {\r\n var data = str.trim().split(' ');\r\n return {\r\n color: string(data[0], \"#000000\"),\r\n alpha: float(data[1], 0.5),\r\n xOffset: float(data[2], 3),\r\n yOffset: float(data[3], 3),\r\n blur: float(data[4], 5)\r\n };\r\n };\r\n\r\n //convert fill string to fill data\r\n var fillData = function (str) {\r\n var data = str.trim().split(' ');\r\n var c = string(data[0], \"#FFFFFF\");\r\n var a = float(data[1], 1);\r\n return {\r\n color: c,\r\n alpha: a,\r\n position: float(data[2], -1),\r\n rgba: hexToRgba(c, a)\r\n };\r\n };\r\n\r\n //create fill style from fill string\r\n var getFillStyle = function (str) {\r\n var fills = str.split(',').filter(function (s) { return s !== ''; }), i;\r\n\r\n //convert to fill data\r\n for (i = 0; i < fills.length; i++) fills[i] = fillData(fills[i]);\r\n\r\n switch (fills.length) {\r\n case 0: return \"white\";\r\n case 1: return fills[0].rgba ? fills[0].rgba : fills[0].color || \"#FFFFFF\";\r\n default:\r\n //make gradient\r\n try {\r\n var gradEnd = baseline + lineHeight - fontSize,\r\n gradient = metricsContext.createLinearGradient(0, gradEnd - fontSize, 0, gradEnd);\r\n\r\n for (i = 0; i < fills.length; i++)\r\n gradient.addColorStop(fills[i].position !== -1 ? fills[i].position : i / (fills.length - 1), fills[i].rgba || fills[i].color);\r\n\r\n return gradient;\r\n }\r\n catch (e) {\r\n return \"#FFFFFF\";\r\n }\r\n }\r\n };\r\n\r\n\r\n //function to draw shadows\r\n var drawShadows = function (shadowString, stroke) {\r\n var shadows = shadowString.trim().split(',').filter(function (s) { return s !== ''; });\r\n if (shadows.length) {\r\n for (var i = 0; i < shadows.length; i++) {\r\n var s = shadowData(shadows[i]);\r\n metricsContext.globalAlpha = s.alpha;\r\n metricsContext.shadowColor = s.color;\r\n metricsContext.shadowOffsetX = s.xOffset + w;\r\n metricsContext.shadowOffsetY = s.yOffset;\r\n metricsContext.shadowBlur = s.blur;\r\n\r\n if (stroke) {\r\n metricsContext.lineWidth = style.stroke;\r\n metricsContext.strokeText(char, paddingX - w, baseline);\r\n }\r\n else metricsContext.fillText(char, paddingX - w, baseline);\r\n }\r\n metricsContext.restore();\r\n }\r\n };\r\n\r\n //draw text shadows\r\n if (style.shadow.length)\r\n drawShadows(style.shadow, false);\r\n\r\n //draw stroke shadows\r\n if (style.stroke && style.strokeShadow.length) {\r\n drawShadows(style.strokeShadow, true);\r\n }\r\n\r\n //draw text\r\n metricsContext.fillStyle = getFillStyle(string(style.fill, \"#000000\"));\r\n metricsContext.fillText(char, paddingX, baseline);\r\n metricsContext.restore();\r\n\r\n //draw stroke\r\n if (style.stroke) {\r\n metricsContext.strokeStyle = getFillStyle(string(style.strokeFill, \"#000000\"));\r\n metricsContext.lineWidth = style.stroke;\r\n metricsContext.strokeText(char, paddingX, baseline);\r\n metricsContext.restore();\r\n }\r\n\r\n\r\n //begin messuring\r\n var pixelData = metricsContext.getImageData(0, 0, w, h).data;\r\n\r\n var i = 3,\r\n line = w * 4,\r\n len = pixelData.length;\r\n\r\n\r\n\r\n //scanline on alpha\r\n while (i < len && !pixelData[i]) { i += 4; }\r\n var ascent = (i / line) | 0;\r\n\r\n\r\n if (i < len) {\r\n //rev scanline on alpha\r\n i = len - 1;\r\n while (i > 0 && !pixelData[i]) { i -= 4; }\r\n var descent = (i / line) | 0;\r\n\r\n\r\n //left to right scanline on alpha\r\n for (i = 3; i < len && !pixelData[i];) {\r\n i += line;\r\n if (i >= len) { i = (i - len) + 4; }\r\n }\r\n var minx = ((i % line) / 4) | 0;\r\n\r\n //right to left scanline on alpha\r\n var step = 1;\r\n for (i = len - 1; i >= 0 && !pixelData[i];) {\r\n i -= line;\r\n if (i < 0) { i = (len - 1) - (step++) * 4; }\r\n }\r\n var maxx = ((i % line) / 4) + 1 | 0;\r\n\r\n\r\n // set font metrics\r\n data.ascent = Math.round(baseline - ascent);\r\n data.descent = Math.round(descent - baseline);\r\n data.height = 1 + Math.round(descent - ascent);\r\n data.bounds = {\r\n minx: minx - paddingX,\r\n maxx: maxx - paddingX,\r\n miny: 0,\r\n maxy: descent - ascent\r\n };\r\n data.rect = {\r\n x: data.bounds.minx,\r\n y: -data.ascent - 2,\r\n width: data.bounds.maxx - data.bounds.minx + 2,\r\n height: data.ascent + data.descent + 4\r\n };\r\n\r\n\r\n //cache (for fast rearrange later)\r\n data.canvas = document.createElement(\"canvas\");\r\n data.canvas.width = data.rect.width;\r\n data.canvas.height = data.rect.height;\r\n var c = data.canvas.getContext(\"2d\");\r\n c.drawImage(metricsCanvas, -paddingX - data.rect.x, -baseline - data.rect.y);\r\n\r\n //reset rect position\r\n data.rect.x = data.rect.y = 0;\r\n\r\n\r\n }\r\n return data;\r\n };\r\n\r\n addCanvas();\r\n};\r\n\r\n\r\n\r\n//helper function for float or default\r\nfunction float(val, def) {\r\n if (isNaN(val)) return def;\r\n return parseFloat(val);\r\n}\r\n\r\n//helper function for int or default\r\nfunction int(val, def) {\r\n if (isNaN(val)) return def;\r\n return parseInt(val);\r\n}\r\n\r\n//helper function for string or default\r\nfunction string(val, def) {\r\n if (typeof val === 'string' && val.length) return val;\r\n return def;\r\n}\r\n\r\n//helper function to convert string hex to int or default\r\nfunction hexToInt(str, def) {\r\n if (typeof str === 'number')\r\n return str;\r\n\r\n var result = parseInt(str.replace('#', '0x'));\r\n\r\n if (isNaN(result)) return def;\r\n return result;\r\n}\r\n\r\n//helper function to convert hex to rgba\r\nfunction hexToRgba(hex, alpha) {\r\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n alpha = float(alpha, 1);\r\n return result ? \"rgba(\" + parseInt(result[1], 16) + \",\" + parseInt(result[2], 16) + \",\" + parseInt(result[3], 16) + \",\" + alpha + \")\" : false;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","function DynamicTextStyle(parent) {\r\n this.respectDirty = true;\r\n this._parent = parent || null;\r\n this._scale = 1;\r\n this._align = 'left';\r\n this._fontFamily = 'Arial';\r\n this._fontSize = 26;\r\n this._fontWeight = 'normal';\r\n this._fontStyle = 'normal';\r\n this._letterSpacing = 0;\r\n this._lineHeight = 0;\r\n this._verticalAlign = 0;\r\n this._rotation = 0;\r\n this._skew = 0;\r\n this._tint = \"#FFFFFF\";\r\n this._fill = '#FFFFFF';\r\n this._shadow = '';\r\n this._stroke = 0;\r\n this._strokeFill = '';\r\n this._strokeShadow = '';\r\n this._wrap = true;\r\n this._breakWords = false;\r\n this._overflowX = 'visible'; //visible|hidden\r\n this._overflowY = 'visible'; //visible|hidden\r\n this._ellipsis = false;\r\n\r\n\r\n var _cachedEllipsisSize = null;\r\n this.ellipsisSize = function (atlas) {\r\n if (!this.ellipsis) return 0;\r\n if (_cachedEllipsisSize === null)\r\n _cachedEllipsisSize = (atlas.getCharObject(\".\", this).width + this.letterSpacing) * 3;\r\n return _cachedEllipsisSize;\r\n };\r\n}\r\n\r\n\r\nDynamicTextStyle.prototype.clone = function () {\r\n var style = new DynamicTextStyle();\r\n style.merge(this);\r\n return style;\r\n};\r\n\r\nDynamicTextStyle.prototype.merge = function (style) {\r\n\r\n if (typeof style === 'object') {\r\n this.respectDirty = false;\r\n for (var param in style) {\r\n var val = style[param];\r\n if (typeof val === 'function' || param === 'respectDirty' || param === '_parent') continue;\r\n this[param] = style[param];\r\n }\r\n this.respectDirty = true;\r\n this._dirty = true;\r\n }\r\n};\r\n\r\nDynamicTextStyle.prototype.ctxKey = function (char) {\r\n return [char, this.fill, this.shadow, this.stroke, this.strokeFill, this.strokeShadow].join('|');\r\n};\r\n\r\nDynamicTextStyle.prototype.ctxFont = function () {\r\n var fontSize = Math.min(200, Math.max(1, this.fontSize || 26)) + \"px \";\r\n var fontWeight = this.fontWeight === \"bold\" ? this.fontWeight + \" \" : \"\";\r\n var fontStyle = this.fontStyle === \"italic\" || this.fontStyle === \"oblique\" ? this.fontStyle + \" \" : \"\";\r\n return fontWeight + fontStyle + fontSize + this.fontFamily;\r\n};\r\n\r\nDynamicTextStyle.prototype.constructor = DynamicTextStyle;\r\nmodule.exports = DynamicTextStyle;\r\n\r\nObject.defineProperties(DynamicTextStyle.prototype, {\r\n _dirty: {\r\n set: function (val) {\r\n if (this.respectDirty) {\r\n if (this._parent !== null) {\r\n this._parent.dirtyStyle = val;\r\n this._parent.update();\r\n }\r\n }\r\n }\r\n },\r\n scale: {\r\n get: function () {\r\n return this._scale;\r\n },\r\n set: function (val) {\r\n if (val !== this._scale) {\r\n this._scale = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n align: {\r\n get: function () {\r\n return this._align;\r\n },\r\n set: function (val) {\r\n if (val !== this._align) {\r\n this._align = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontFamily: {\r\n get: function () {\r\n return this._fontFamily;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontFamily) {\r\n this._fontFamily = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontSize: {\r\n get: function () {\r\n return this._fontSize;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontSize) {\r\n this._fontSize = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontWeight: {\r\n get: function () {\r\n return this._fontWeight;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontWeight) {\r\n this._fontWeight = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontStyle: {\r\n get: function () {\r\n return this._fontStyle;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontStyle) {\r\n this._fontStyle = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n letterSpacing: {\r\n get: function () {\r\n return this._letterSpacing;\r\n },\r\n set: function (val) {\r\n if (val !== this._letterSpacing) {\r\n this._letterSpacing = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n lineHeight: {\r\n get: function () {\r\n return this._lineHeight;\r\n },\r\n set: function (val) {\r\n if (val !== this._lineHeight) {\r\n this._lineHeight = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n verticalAlign: {\r\n get: function () {\r\n return this._verticalAlign;\r\n },\r\n set: function (val) {\r\n if (val !== this._verticalAlign) {\r\n this._verticalAlign = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n rotation: {\r\n get: function () {\r\n return this._rotation;\r\n },\r\n set: function (val) {\r\n if (val !== this._rotation) {\r\n this._rotation = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n skew: {\r\n get: function () {\r\n return this._skew;\r\n },\r\n set: function (val) {\r\n if (val !== this._skew) {\r\n this._skew = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n tint: {\r\n get: function () {\r\n return this._tint;\r\n },\r\n set: function (val) {\r\n if (val !== this._tint) {\r\n this._tint = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fill: {\r\n get: function () {\r\n return this._fill;\r\n },\r\n set: function (val) {\r\n if (val !== this._fill) {\r\n this._fill = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n shadow: {\r\n get: function () {\r\n return this._shadow;\r\n },\r\n set: function (val) {\r\n if (val !== this._shadow) {\r\n this._shadow = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n stroke: {\r\n get: function () {\r\n return this._stroke;\r\n },\r\n set: function (val) {\r\n if (val !== this._stroke) {\r\n this._stroke = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n strokeFill: {\r\n get: function () {\r\n return this._strokeFill;\r\n },\r\n set: function (val) {\r\n if (val !== this._strokeFill) {\r\n this._strokeFill = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n strokeShadow: {\r\n get: function () {\r\n return this._strokeShadow;\r\n },\r\n set: function (val) {\r\n if (val !== this._strokeShadow) {\r\n this._strokeShadow = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n wrap: {\r\n get: function () {\r\n return this._wrap;\r\n },\r\n set: function (val) {\r\n if (val !== this._wrap) {\r\n this._wrap = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n breakWords: {\r\n get: function () {\r\n return this._breakWords;\r\n },\r\n set: function (val) {\r\n if (val !== this._breakWords) {\r\n this._breakWords = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n overflowX: {\r\n get: function () {\r\n return this._overflowX;\r\n },\r\n set: function (val) {\r\n if (val !== this._overflowX) {\r\n this._overflowX = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n overflowY: {\r\n get: function () {\r\n return this._overflowY;\r\n },\r\n set: function (val) {\r\n if (val !== this._overflowY) {\r\n this._overflowY = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n ellipsis: {\r\n get: function () {\r\n return this._ellipsis;\r\n },\r\n set: function (val) {\r\n if (val !== this._ellipsis) {\r\n this._ellipsis = val;\r\n this._dirty = true;\r\n }\r\n }\r\n }\r\n});","var Ease = {},\r\n EaseBase = require('./EaseBase'),\r\n ExponentialEase = require('./ExponentialEase'),\r\n HALF_PI = Math.PI * 0.5;\r\n\r\nfunction create(fn) {\r\n var e = Object.create(EaseBase.prototype);\r\n e.getPosition = fn;\r\n return e;\r\n}\r\n\r\n\r\n//Liear\r\nEase.Linear = new EaseBase();\r\n\r\n//Exponetial Eases\r\nfunction wrapEase(easeInFunction, easeOutFunction, easeInOutFunction) {\r\n return {\r\n easeIn: easeInFunction,\r\n easeOut: easeOutFunction,\r\n easeInOut: easeInOutFunction\r\n };\r\n}\r\n\r\nEase.Power0 = {\r\n \"easeNone\" : Ease.Linear,\r\n};\r\n\r\nEase.Power1 = Ease.Quad = wrapEase(\r\n new ExponentialEase(1, 1, 0),\r\n new ExponentialEase(1, 0, 1),\r\n new ExponentialEase(1, 1, 1));\r\n\r\nEase.Power2 = Ease.Cubic = wrapEase(\r\n new ExponentialEase(2, 1, 0),\r\n new ExponentialEase(2, 0, 1),\r\n new ExponentialEase(2, 1, 1));\r\n\r\nEase.Power3 = Ease.Quart = wrapEase(\r\n new ExponentialEase(3, 1, 0),\r\n new ExponentialEase(3, 0, 1),\r\n new ExponentialEase(3, 1, 1));\r\n\r\nEase.Power4 = Ease.Quint = wrapEase(\r\n new ExponentialEase(4, 1, 0),\r\n new ExponentialEase(4, 0, 1),\r\n new ExponentialEase(4, 1, 1));\r\n\r\n\r\n//Bounce\r\nEase.Bounce = {\r\n \"BounceIn\": create(function (p) {\r\n if ((p = 1 - p) < 1 / 2.75) {\r\n return 1 - (7.5625 * p * p);\r\n } else if (p < 2 / 2.75) {\r\n return 1 - (7.5625 * (p -= 1.5 / 2.75) * p + 0.75);\r\n } else if (p < 2.5 / 2.75) {\r\n return 1 - (7.5625 * (p -= 2.25 / 2.75) * p + 0.9375);\r\n }\r\n return 1 - (7.5625 * (p -= 2.625 / 2.75) * p + 0.984375);\r\n }),\r\n \"BounceOut\": create(function (p) {\r\n if (p < 1 / 2.75) {\r\n return 7.5625 * p * p;\r\n } else if (p < 2 / 2.75) {\r\n return 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\r\n } else if (p < 2.5 / 2.75) {\r\n return 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\r\n }\r\n return 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\r\n }),\r\n \"BounceInOut\": create(function (p) {\r\n var invert = (p < 0.5);\r\n if (invert) {\r\n p = 1 - (p * 2);\r\n } else {\r\n p = (p * 2) - 1;\r\n }\r\n if (p < 1 / 2.75) {\r\n p = 7.5625 * p * p;\r\n } else if (p < 2 / 2.75) {\r\n p = 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\r\n } else if (p < 2.5 / 2.75) {\r\n p = 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\r\n } else {\r\n p = 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\r\n }\r\n return invert ? (1 - p) * 0.5 : p * 0.5 + 0.5;\r\n })\r\n};\r\n\r\n//Circ\r\nEase.Circ = {\r\n \"CircIn\": create(function (p) {\r\n return -(Math.sqrt(1 - (p * p)) - 1);\r\n }),\r\n \"CircOut\": create(function (p) {\r\n return Math.sqrt(1 - (p = p - 1) * p);\r\n }),\r\n \"CircInOut\": create(function (p) {\r\n return ((p *= 2) < 1) ? -0.5 * (Math.sqrt(1 - p * p) - 1) : 0.5 * (Math.sqrt(1 - (p -= 2) * p) + 1);\r\n })\r\n};\r\n\r\n\r\n//Expo\r\nEase.Expo = {\r\n \"ExpoIn\": create(function (p) {\r\n return Math.pow(2, 10 * (p - 1)) - 0.001;\r\n }),\r\n \"ExpoOut\": create(function (p) {\r\n return 1 - Math.pow(2, -10 * p);\r\n }),\r\n \"ExpoInOut\": create(function (p) {\r\n return ((p *= 2) < 1) ? 0.5 * Math.pow(2, 10 * (p - 1)) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\r\n })\r\n};\r\n\r\n\r\n//Sine\r\nEase.Sine = {\r\n \"SineIn\": create(function (p) {\r\n return -Math.cos(p * HALF_PI) + 1;\r\n }),\r\n \"SineOut\": create(function (p) {\r\n return Math.sin(p * HALF_PI);\r\n }),\r\n \"SineInOut\": create(function (p) {\r\n return -0.5 * (Math.cos(Math.PI * p) - 1);\r\n })\r\n};\r\n\r\n\r\nmodule.exports = Ease;\r\n\r\n\r\n","function EaseBase() {\r\n this.getPosition = function (p) {\r\n return p;\r\n };\r\n}\r\n\r\nEaseBase.prototype.constructor = EaseBase;\r\nmodule.exports = EaseBase;\r\n\r\n\r\n\r\n","var EaseBase = require('./EaseBase');\r\n\r\nfunction ExponentialEase(power, easeIn, easeOut) {\r\n var pow = power;\r\n var t = easeIn && easeOut ? 3 : easeOut ? 1 : 2;\r\n this.getPosition = function (p) {\r\n var r = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2;\n if (pow === 1) {\r\n r *= r;\r\n } else if (pow === 2) {\r\n r *= r * r;\r\n } else if (pow === 3) {\r\n r *= r * r * r;\r\n } else if (pow === 4) {\r\n r *= r * r * r * r;\r\n }\n return (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2);\r\n };\r\n}\r\n\r\nExponentialEase.prototype = Object.create(EaseBase.prototype);\r\nExponentialEase.prototype.constructor = ExponentialEase;\r\nmodule.exports = ExponentialEase;\r\n\r\n\r\n\r\n","var UIBase = require('./UIBase'),\r\n InputController = require('./Interaction/InputController'),\r\n ClickEvent = require('./Interaction/ClickEvent');\r\n/**\r\n * base object for all Input type objects\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param width {number} passed to uibase\r\n * @param height {number} passed to uibase\r\n * @param tabIndex {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for input\r\n */\r\nfunction InputBase(width, height, tabIndex, tabGroup) {\r\n UIBase.call(this, width, height);\r\n var self = this;\r\n this._focused = false;\r\n this._useTab = this._usePrev = this._useNext = true;\r\n this.container.interactive = true;\r\n InputController.registrer(this, tabIndex, tabGroup);\r\n\r\n\r\n var keyDownEvent = function (e) {\r\n if (e.which === 9) {\r\n if (self._useTab) {\r\n InputController.fireTab();\r\n e.preventDefault();\r\n }\r\n }\r\n else if (e.which === 38) {\r\n if (self._usePrev) {\r\n InputController.firePrev();\r\n e.preventDefault();\r\n }\r\n }\r\n else if (e.which === 40) {\r\n if (self._useNext) {\r\n InputController.fireNext();\r\n e.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n var documentMouseDown = function (e) {\r\n if (!self.__down)\r\n self.blur();\r\n };\r\n\r\n this.container.on(\"pointerdown\", function (e) {\r\n self.focus();\r\n self.__down = true;\r\n });\r\n\r\n this.container.on(\"pointerup\", function (e) {\r\n self.__down = false;\r\n });\r\n\r\n this.container.on(\"pointerupoutside\", function (e) {\r\n self.__down = false;\r\n });\r\n\r\n //var cancelFocusEvent = new ClickEvent(this.stage)\r\n\r\n this._bindEvents = function () {\r\n if (this.stage !== null) {\r\n this.stage.on(\"pointerdown\", documentMouseDown);\r\n document.addEventListener(\"keydown\", keyDownEvent);\r\n }\r\n };\r\n\r\n this._clearEvents = function () {\r\n if (this.stage !== null) {\r\n this.stage.off(\"pointerdown\", documentMouseDown);\r\n document.removeEventListener(\"keydown\", keyDownEvent);\r\n }\r\n };\r\n}\r\n\r\nInputBase.prototype = Object.create(UIBase.prototype);\r\nInputBase.prototype.constructor = InputBase;\r\nmodule.exports = InputBase;\r\n\r\nInputBase.prototype.focus = function () {\r\n if (!this._focused) {\r\n this._focused = true;\r\n this._bindEvents();\r\n InputController.set(this);\r\n this.emit(\"focusChanged\", true);\r\n this.emit(\"focus\");\r\n\r\n }\r\n};\r\n\r\nInputBase.prototype.blur = function () {\r\n if (this._focused) {\r\n InputController.clear();\r\n this._focused = false;\r\n this._clearEvents();\r\n this.emit(\"focusChanged\", false);\r\n this.emit(\"blur\");\r\n\r\n }\r\n};","var ClickEvent = function (obj) {\r\n var bound = false,\r\n self = this,\r\n id = 0,\r\n ishover = false;\r\n\r\n obj.container.interactive = true;\r\n\r\n var _onMouseDown = function (event) {\r\n id = event.data.identifier;\r\n self.onPress.call(obj, event, true);\r\n if (!bound) {\r\n obj.container.on('mouseup', _onMouseUp);\r\n obj.container.on('mouseupoutside', _onMouseUpOutside);\r\n obj.container.on('touchend', _onMouseUp);\r\n obj.container.on('touchendoutside', _onMouseUpOutside);\r\n bound = true;\r\n }\r\n };\r\n\r\n var _mouseUpAll = function (event) {\r\n if (event.data.identifier !== id) return;\r\n if (bound) {\r\n obj.container.removeListener('mouseup', _onMouseUp);\r\n obj.container.removeListener('mouseupoutside', _onMouseUpOutside);\r\n obj.container.removeListener('touchend', _onMouseUp);\r\n obj.container.removeListener('touchendoutside', _onMouseUpOutside);\r\n bound = false;\r\n }\r\n self.onPress.call(obj, event, false);\r\n };\r\n\r\n var _onMouseUp = function (event) {\r\n if (event.data.identifier !== id) return;\r\n _mouseUpAll(event);\r\n self.onClick.call(obj, event);\r\n };\r\n\r\n var _onMouseUpOutside = function (event) {\r\n if (event.data.identifier !== id) return;\r\n _mouseUpAll(event);\r\n };\r\n\r\n var _onMouseOver = function (event) {\r\n if (!ishover) {\r\n ishover = true;\r\n self.onHover.call(obj, event);\r\n }\r\n };\r\n\r\n var _onMouseOut = function (event) {\r\n if (ishover) {\r\n ishover = false;\r\n self.onLeave.call(obj, event);\r\n }\r\n };\r\n\r\n this.stopEvent = function () {\r\n if (bound) {\r\n obj.container.removeListener('mouseup', _onMouseUp);\r\n obj.container.removeListener('mouseupoutside', _onMouseUpOutside);\r\n obj.container.removeListener('touchend', _onMouseUp);\r\n obj.container.removeListener('touchendoutside', _onMouseUpOutside);\r\n bound = false;\r\n }\r\n obj.container.removeListener('mousedown', _onMouseDown);\r\n obj.container.removeListener('touchstart', _onMouseDown);\r\n obj.container.removeListener('mouseover', _onMouseOver);\r\n obj.container.removeListener('mouseout', _onMouseOut);\r\n };\r\n\r\n this.startEvent = function () {\r\n obj.container.on('mousedown', _onMouseDown);\r\n obj.container.on('touchstart', _onMouseDown);\r\n obj.container.on('mouseover', _onMouseOver);\r\n obj.container.on('mouseout', _onMouseOut);\r\n };\r\n\r\n this.startEvent();\r\n};\r\n\r\nClickEvent.prototype.constructor = ClickEvent;\r\nmodule.exports = ClickEvent;\r\n\r\nClickEvent.prototype.onHover = function (event) { };\r\nClickEvent.prototype.onLeave = function (event) { };\r\nClickEvent.prototype.onPress = function (event, isPressed) { };\r\nClickEvent.prototype.onClick = function (event) { };","var _items = [];\r\nvar DragDropController = {\r\n add: function (item, event) {\r\n item._dragDropEventId = event.data.identifier;\r\n if (_items.indexOf(item) === -1) {\r\n _items.push(item);\r\n return true;\r\n }\r\n return false;\r\n },\r\n getItem: function (object) {\r\n var item = null, index;\r\n for (var i = 0; i < _items.length; i++) {\r\n if (_items[i] === object) {\r\n item = _items[i];\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (item !== null) {\r\n _items.splice(index, 1);\r\n return item;\r\n }\r\n else {\r\n return false;\r\n }\r\n },\r\n getEventItem: function (event, group) {\r\n var item = null, index, id = event.data.identifier;\r\n for (var i = 0; i < _items.length; i++) {\r\n if (_items[i]._dragDropEventId === id) {\r\n if (group !== _items[i].dragGroup) {\r\n return false;\r\n }\r\n item = _items[i];\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (item !== null) {\r\n _items.splice(index, 1);\r\n return item;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n};\r\n\r\nmodule.exports = DragDropController;","var DragEvent = function (obj) {\r\n var bound = false,\r\n start = new PIXI.Point(),\r\n offset = new PIXI.Point(),\r\n mouse = new PIXI.Point(),\r\n movementX = 0,\r\n movementY = 0,\r\n cancel = false,\r\n dragging = false,\r\n self = this,\r\n id = 0;\r\n\r\n obj.container.interactive = true;\r\n\r\n var _onDragStart = function (e) {\r\n id = e.data.identifier;\r\n self.onPress.call(obj, e, true);\r\n if (!bound) {\r\n start.copy(e.data.global);\r\n obj.stage.on('mousemove', _onDragMove);\r\n obj.stage.on('touchmove', _onDragMove);\r\n obj.stage.on('mouseup', _onDragEnd);\r\n obj.stage.on('mouseupoutside', _onDragEnd);\r\n obj.stage.on('touchend', _onDragEnd);\r\n obj.stage.on('touchendoutside', _onDragEnd);\r\n obj.stage.on('touchcancel', _onDragEnd);\r\n bound = true;\r\n }\r\n };\r\n\r\n var _onDragMove = function (event) {\r\n if (event.data.identifier !== id) return;\r\n mouse.copy(event.data.global);\r\n offset.set(mouse.x - start.x, mouse.y - start.y);\r\n if (!dragging) {\r\n movementX = Math.abs(offset.x);\r\n movementY = Math.abs(offset.y);\r\n if (movementX === 0 && movementY === 0 || Math.max(movementX, movementY) < obj.dragThreshold) return; //thresshold\r\n if (obj.dragRestrictAxis !== null) {\r\n cancel = false;\r\n if (obj.dragRestrictAxis == \"x\" && movementY > movementX) cancel = true;\r\n else if (obj.dragRestrictAxis == \"y\" && movementY <= movementX) cancel = true;\r\n if (cancel) {\r\n _onDragEnd(event);\r\n return;\r\n }\r\n }\r\n self.onDragStart.call(obj, event);\r\n dragging = true;\r\n }\r\n self.onDragMove.call(obj, event, offset);\r\n };\r\n\r\n var _onDragEnd = function (event) {\r\n if (event.data.identifier !== id) return;\r\n if (bound) {\r\n obj.stage.removeListener('mousemove', _onDragMove);\r\n obj.stage.removeListener('touchmove', _onDragMove);\r\n obj.stage.removeListener('mouseup', _onDragEnd);\r\n obj.stage.removeListener('mouseupoutside', _onDragEnd);\r\n obj.stage.removeListener('touchend', _onDragEnd);\r\n obj.stage.removeListener('touchendoutside', _onDragEnd);\r\n obj.stage.removeListener('touchcancel', _onDragEnd);\r\n dragging = false;\r\n bound = false;\r\n self.onDragEnd.call(obj, event);\r\n self.onPress.call(obj, event, false);\r\n\r\n }\r\n };\r\n\r\n this.stopEvent = function () {\r\n if (bound) {\r\n obj.stage.removeListener('mousemove', _onDragMove);\r\n obj.stage.removeListener('touchmove', _onDragMove);\r\n obj.stage.removeListener('mouseup', _onDragEnd);\r\n obj.stage.removeListener('mouseupoutside', _onDragEnd);\r\n obj.stage.removeListener('touchend', _onDragEnd);\r\n obj.stage.removeListener('touchendoutside', _onDragEnd);\r\n bound = false;\r\n }\r\n obj.container.removeListener('mousedown', _onDragStart);\r\n obj.container.removeListener('touchstart', _onDragStart);\r\n };\r\n\r\n this.startEvent = function () {\r\n obj.container.on('mousedown', _onDragStart);\r\n obj.container.on('touchstart', _onDragStart);\r\n };\r\n\r\n this.startEvent();\r\n};\r\n\r\nDragEvent.prototype.constructor = DragEvent;\r\nmodule.exports = DragEvent;\r\n\r\nDragEvent.prototype.onPress = function (event, isPressed) { };\r\nDragEvent.prototype.onDragEnd = function (event) { };\r\nDragEvent.prototype.onDragMove = function (event, offset) { };\r\nDragEvent.prototype.onDragStart = function (event) { };","var _currentItem;\r\nvar tabGroups = {};\r\nvar checkGroups = {};\r\nvar checkGroupValues = {};\r\n\r\nvar InputController = {\r\n registrer: function (item, tabIndex, tabGroup) {\r\n var groupName = tabGroup || \"default\";\r\n\r\n var items = tabGroups[groupName];\r\n if (!items)\r\n items = tabGroups[groupName] = [];\r\n\r\n var i = items.indexOf(item);\r\n if (i === -1) {\r\n item._tabIndex = tabIndex !== undefined ? tabIndex : -1;\r\n item._tabGroup = items;\r\n items.push(item);\r\n items.sort(function (a, b) {\r\n if (a._tabIndex < b._tabIndex)\r\n return -1;\r\n if (a._tabIndex > b._tabIndex)\r\n return 1;\r\n return 0;\r\n });\r\n }\r\n },\r\n set: function (item) {\r\n if (_currentItem && typeof _currentItem.blur === \"function\")\r\n _currentItem.blur();\r\n _currentItem = item;\r\n },\r\n clear: function () {\r\n _currentItem = undefined;\r\n },\r\n fireTab: function () {\r\n if (_currentItem) {\r\n var i = _currentItem._tabGroup.indexOf(_currentItem) + 1;\r\n if (i >= _currentItem._tabGroup.length) i = 0;\r\n _currentItem._tabGroup[i].focus();\r\n }\r\n },\r\n fireNext: function () {\r\n if (_currentItem) {\r\n var i = _currentItem._tabGroup.indexOf(_currentItem) + 1;\r\n if (i >= _currentItem._tabGroup.length) i = _currentItem._tabGroup.length - 1;\r\n _currentItem._tabGroup[i].focus();\r\n }\r\n },\r\n firePrev: function () {\r\n if (_currentItem) {\r\n var i = _currentItem._tabGroup.indexOf(_currentItem) - 1;\r\n if (i < 0) i = 0;\r\n _currentItem._tabGroup[i].focus();\r\n }\r\n },\r\n registrerCheckGroup: function (cb) {\r\n var name = cb.checkGroup;\r\n var group = checkGroups[name];\r\n if (!group) group = checkGroups[name] = {};\r\n group[cb.value] = cb;\r\n\r\n if (cb.checked)\r\n checkGroupValues[name] = cb.value;\r\n },\r\n updateCheckGroupSelected: function (cb) {\r\n var group = checkGroups[cb.checkGroup];\r\n for (var val in group) {\r\n var b = group[val];\r\n if (b !== cb)\r\n b.checked = false;\r\n }\r\n checkGroupValues[cb.checkGroup] = cb.value;\r\n },\r\n getCheckGroupSelectedValue: function (name) {\r\n if (checkGroupValues[name])\r\n return checkGroupValues[name];\r\n return \"\";\r\n },\r\n setCheckGroupSelectedValue: function (name, val) {\r\n var group = checkGroups[name];\r\n if (group) {\r\n var cb = group[val];\r\n if (cb) {\r\n cb.checked = true;\r\n }\r\n }\r\n }\r\n};\r\n\r\nmodule.exports = InputController;","var Interaction = {\r\n ClickEvent: require('./ClickEvent'),\r\n DragEvent: require('./DragEvent'),\r\n MouseScrollEvent: require('./MouseScrollEvent')\r\n};\r\n\r\n\r\nmodule.exports = Interaction;","var MouseScrollEvent = function (obj, preventDefault) {\r\n var bound = false, delta = new PIXI.Point(), self = this;\r\n obj.container.interactive = true;\r\n\r\n var _onMouseScroll = function (event) {\r\n if (preventDefault)\r\n event.preventDefault();\r\n\r\n delta.set(event.deltaX, event.deltaY);\r\n self.onMouseScroll.call(obj, event, delta);\r\n };\r\n\r\n var _onHover = function (event) {\r\n if (!bound) {\r\n document.addEventListener(\"mousewheel\", _onMouseScroll, false);\r\n document.addEventListener(\"DOMMouseScroll\", _onMouseScroll, false);\r\n bound = true;\r\n }\r\n };\r\n\r\n var _onMouseOut = function (event) {\r\n if (bound) {\r\n document.removeEventListener(\"mousewheel\", _onMouseScroll);\r\n document.removeEventListener(\"DOMMouseScroll\", _onMouseScroll);\r\n bound = false;\r\n }\r\n };\r\n\r\n this.stopEvent = function () {\r\n if (bound) {\r\n document.removeEventListener(\"mousewheel\", _onMouseScroll);\r\n document.removeEventListener(\"DOMMouseScroll\", _onMouseScroll);\r\n bound = false;\r\n }\r\n obj.container.removeListener('mouseover', _onHover);\r\n obj.container.removeListener('mouseout', _onMouseOut);\r\n };\r\n\r\n this.startEvent = function () {\r\n obj.container.on('mouseover', _onHover);\r\n obj.container.on('mouseout', _onMouseOut);\r\n };\r\n\r\n this.startEvent();\r\n\r\n \r\n};\r\n\r\nMouseScrollEvent.prototype.constructor = MouseScrollEvent;\r\nmodule.exports = MouseScrollEvent;\r\n\r\nMouseScrollEvent.prototype.onMouseScroll = function (event, delta) { };","var MathHelper = {\r\n Lerp: function (start, stop, amt) {\r\n if (amt > 1) amt = 1;\r\n else if (amt < 0) amt = 0;\r\n return start + (stop - start) * amt;\r\n },\r\n Round: function(number, decimals) {\r\n var pow = Math.pow(10, decimals);\r\n return Math.round(number * pow) / pow;\r\n }\r\n};\r\n\r\nmodule.exports = MathHelper;","var Slider = require('./Slider'),\r\n Tween = require('./Tween'),\r\n Ease = require('./Ease/Ease');\r\n\r\n/**\r\n* An UI scrollbar to control a ScrollingContainer\r\n* \r\n* @class\r\n* @extends PIXI.UI.Slider\r\n* @memberof PIXI.UI\r\n* @param options {Object} ScrollBar settings\r\n* @param options.track {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} Any type of UIOBject, will be used for the scrollbar track\r\n* @param options.handle {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as scrollbar handle\r\n* @param options.scrollingContainer {PIXI.UI.ScrollingContainer} The container to control\r\n* @param [options.vertical=false] {boolean} Direction of the scrollbar\r\n* @param [options.autohide=false] {boolean} Hides the scrollbar when not needed\r\n*\r\n*/\r\nfunction ScrollBar(options) {\r\n Slider.call(this, { track: options.track, handle: options.handle, fill: null, vertical: options.vertical });\r\n this.scrollingContainer = options.scrollingContainer;\r\n this.autohide = options.autohide;\r\n this._hidden = false;\r\n\r\n}\r\n\r\nScrollBar.prototype = Object.create(Slider.prototype);\r\nScrollBar.prototype.constructor = ScrollBar;\r\nmodule.exports = ScrollBar;\r\n\r\n\r\nScrollBar.prototype.initialize = function () {\r\n Slider.prototype.initialize.call(this);\r\n this.decimals = 3; //up decimals to trigger ValueChanging more often\r\n\r\n this._onValueChanging = function (val) {\r\n var sizeAmt = this.scrollingContainer._height / this.scrollingContainer.innerContainer.height || 0.001;\r\n if (sizeAmt < 1)\r\n this.scrollingContainer.forcePctPosition(this.vertical ? \"y\" : \"x\", this._amt);\r\n };\r\n\r\n this.scrollingContainer._scrollBars.push(this);\r\n\r\n};\r\n\r\nScrollBar.prototype.alignToContainer = function () {\r\n var newPos,\r\n size,\r\n x_y = this.vertical ? \"y\" : \"x\",\r\n width_height = this.vertical ? \"height\" : \"width\",\r\n top_left = this.vertical ? \"top\" : \"left\",\r\n _posAmt = !this.scrollingContainer.innerContainer[width_height] ? 0 : -(this.scrollingContainer.innerContainer[x_y] / this.scrollingContainer.innerContainer[width_height]),\r\n sizeAmt = !this.scrollingContainer.innerContainer[width_height] ? 1 : this.scrollingContainer[\"_\" + width_height] / this.scrollingContainer.innerContainer[width_height];\r\n\r\n //update amt\r\n this._amt = !this.scrollingContainer[\"_\" + width_height] ? 0 : -(this.scrollingContainer.innerContainer[x_y] / (this.scrollingContainer.innerContainer[width_height] - this.scrollingContainer[\"_\" + width_height]));\r\n\r\n if (sizeAmt >= 1) {\r\n size = this[\"_\" + width_height];\r\n this.handle[top_left] = size * 0.5;\r\n this.toggleHidden(true);\r\n }\r\n else {\r\n size = this[\"_\" + width_height] * sizeAmt;\r\n if (this._amt > 1) size -= (this[\"_\" + width_height] - size) * (this._amt - 1);\r\n else if (this._amt < 0) size -= (this[\"_\" + width_height] - size) * -this._amt;\r\n if (this._amt < 0) newPos = size * 0.5;\r\n else if (this._amt > 1) newPos = this[\"_\" + width_height] - size * 0.5;\r\n else newPos = (_posAmt * this.scrollingContainer[\"_\" + width_height]) + (size * 0.5);\r\n this.handle[top_left] = newPos;\r\n this.toggleHidden(false);\r\n }\r\n this.handle[width_height] = size;\r\n};\r\n\r\n\r\nScrollBar.prototype.toggleHidden = function (hidden) {\r\n if (this.autohide) {\r\n if (hidden && !this._hidden) {\r\n Tween.to(this, 0.2, { alpha: 0 });\r\n this._hidden = true;\r\n }\r\n else if (!hidden && this._hidden) {\r\n Tween.to(this, 0.2, { alpha: 1 });\r\n this._hidden = false;\r\n }\r\n }\r\n};\r\n\r\n\r\n\r\n\r\n","var UIBase = require('./UIBase'),\r\n Container = require('./Container'),\r\n MathHelper = require('./MathHelper'),\r\n Ticker = require('./Ticker'),\r\n DragEvent = require('./Interaction/DragEvent'),\r\n MouseScrollEvent = require('./Interaction/MouseScrollEvent');\r\n\r\n\r\n/**\r\n * An UI Container object with expandMask hidden and possibility to enable scrolling\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param [options.scrollX=false] {Boolean} Enable horizontal scrolling\r\n * @param [options.scrollY=false] {Boolean} Enable vertical scrolling\r\n * @param [options.dragScrolling=true] {Boolean} Enable mousedrag scrolling\r\n * @param [options.softness=0.5] {Number} (0-1) softness of scrolling\r\n * @param [options.width=0] {Number|String} container width \r\n * @param [options.height=0] {Number} container height \r\n * @param [options.radius=0] {Number} corner radius of clipping mask\r\n * @param [options.expandMask=0] {Number} mask expand (px)\r\n * @param [options.overflowY=0] {Number} how much can be scrolled past content dimensions\r\n * @param [options.overflowX=0] {Number} how much can be scrolled past content dimensions\r\n */\r\nfunction ScrollingContainer(options) {\r\n options = options || {};\r\n Container.call(this, options.width, options.height);\r\n this.mask = new PIXI.Graphics();\r\n this.innerContainer = new PIXI.Container();\r\n this.innerBounds = new PIXI.Rectangle();\r\n this.container.addChild(this.mask);\r\n this.container.addChild(this.innerContainer);\r\n this.container.mask = this.mask;\r\n this.scrollX = options.scrollX !== undefined ? options.scrollX : false;\r\n this.scrollY = options.scrollY !== undefined ? options.scrollY : true;\r\n this.dragScrolling = options.dragScrolling !== undefined ? options.dragScrolling : true;\r\n this.softness = options.softness !== undefined ? Math.max(Math.min(options.softness || 0, 1), 0) : 0.5;\r\n this.radius = options.radius || 0;\r\n this.expandMask = options.expandMask || 0;\r\n this.overflowY = options.overflowY || 0;\r\n this.overflowX = options.overflowX || 0;\r\n\r\n this.animating = false;\r\n this.scrolling = false;\r\n this._scrollBars = [];\r\n\r\n this.boundCached = performance.now() - 1000;\r\n}\r\n\r\n\r\nScrollingContainer.prototype = Object.create(Container.prototype);\r\nScrollingContainer.prototype.constructor = ScrollingContainer;\r\nmodule.exports = ScrollingContainer;\r\n\r\n\r\nScrollingContainer.prototype.initialize = function () {\r\n Container.prototype.initialize.apply(this);\r\n if (this.scrollX || this.scrollY) {\r\n this.initScrolling();\r\n }\r\n};\r\n\r\nScrollingContainer.prototype.update = function () {\r\n Container.prototype.update.apply(this);\r\n if (this._lastWidth != this._width || this._lastHeight != this._height) {\r\n var of = this.expandMask;\r\n this.mask.clear();\r\n this.mask.lineStyle(0);\r\n this.mask.beginFill(0xFFFFFF, 1);\r\n if (this.radius === 0) {\r\n\r\n //this.mask.drawRect(0, 0, this._width, this._height);\r\n //this.mask.drawRect(-of, -of, this._width + of, this.height + of);\r\n //this.mask.moveTo(-of, -of);\r\n //this.mask.lineTo(this._width + of, -of);\r\n //this.mask.lineTo(this._width + of, this._height + of);\r\n //this.mask.lineTo(-of, this._height + of);\r\n this.mask.drawRect(-of, -of, this._width + of, this._height + of);\r\n }\r\n else {\r\n this.mask.drawRoundedRect(-of, -of, this._width + of, this.height + of, this.radius);\r\n }\r\n this.mask.endFill();\r\n this._lastWidth = this._width;\r\n this._lastHeight = this._height;\r\n }\r\n\r\n\r\n if (this.setScrollPosition) {\r\n this.setScrollPosition();\r\n }\r\n};\r\n\r\nScrollingContainer.prototype.addChild = function (UIObject) {\r\n var argumentsLength = arguments.length;\r\n if (argumentsLength > 1) {\r\n for (var i = 0; i < argumentsLength; i++) {\r\n this.addChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n Container.prototype.addChild.call(this, UIObject);\r\n this.innerContainer.addChild(UIObject.container);\r\n this.getInnerBounds(true); //make sure bounds is updated instantly when a child is added\r\n }\r\n return UIObject;\r\n};\r\n\r\n\r\nScrollingContainer.prototype.updateScrollBars = function () {\r\n for (var i = 0; i < this._scrollBars.length; i++) {\r\n this._scrollBars[i].alignToContainer();\r\n }\r\n};\r\n\r\n\r\nScrollingContainer.prototype.getInnerBounds = function (force) {\r\n //this is a temporary fix, because we cant rely on innercontainer height if the children is positioned > 0 y.\r\n if (force || performance.now() - this.boundCached > 1000) {\r\n this.innerContainer.getLocalBounds(this.innerBounds);\r\n this.innerContainer.getLocalBounds(this.innerBounds);\r\n this.innerBounds.height = this.innerBounds.y + this.innerContainer.height;\r\n this.innerBounds.width = this.innerBounds.x + this.innerContainer.width;\r\n this.boundCached = performance.now();\r\n }\r\n\r\n return this.innerBounds;\r\n};\r\n\r\nScrollingContainer.prototype.initScrolling = function () {\r\n var container = this.innerContainer,\r\n containerStart = new PIXI.Point(),\r\n targetPosition = new PIXI.Point(),\r\n lastPosition = new PIXI.Point(),\r\n Position = new PIXI.Point(),\r\n Speed = new PIXI.Point(),\r\n stop,\r\n self = this;\r\n\r\n this.forcePctPosition = function (direction, pct) {\r\n var bounds = this.getInnerBounds();\r\n\r\n if (this.scrollX && direction == \"x\") {\r\n container.position[direction] = -((bounds.width - this._width) * pct);\r\n }\r\n if (this.scrollY && direction == \"y\") {\r\n container.position[direction] = -((bounds.height - this._height) * pct);\r\n }\r\n Position[direction] = targetPosition[direction] = container.position[direction];\r\n };\r\n\r\n this.focusPosition = function (pos) {\r\n var bounds = this.getInnerBounds();\r\n\r\n var dif;\r\n if (this.scrollX) {\r\n var x = Math.max(0, (Math.min(bounds.width, pos.x)));\r\n if (x + container.x > this._width) {\r\n dif = x - this._width;\r\n container.x = -dif;\r\n }\r\n else if (x + container.x < 0) {\r\n dif = x + container.x;\r\n container.x -= dif;\r\n }\r\n }\r\n\r\n if (this.scrollY) {\r\n var y = Math.max(0, (Math.min(bounds.height, pos.y)));\r\n\r\n if (y + container.y > this._height) {\r\n dif = y - this._height;\r\n container.y = -dif;\r\n }\r\n else if (y + container.y < 0) {\r\n dif = y + container.y;\r\n container.y -= dif;\r\n }\r\n }\r\n\r\n lastPosition.copy(container.position);\r\n targetPosition.copy(container.position);\r\n Position.copy(container.position);\r\n this.updateScrollBars();\r\n\r\n };\r\n\r\n this.setScrollPosition = function (speed) {\r\n if (speed) {\r\n Speed = speed;\r\n }\r\n\r\n if (!this.animating) {\r\n this.animating = true;\r\n lastPosition.copy(container.position);\r\n targetPosition.copy(container.position);\r\n Ticker.on(\"update\", this.updateScrollPosition, this);\r\n }\r\n };\r\n\r\n this.updateScrollPosition = function (delta) {\r\n stop = true;\r\n if (this.scrollX) this.updateDirection(\"x\", delta);\r\n if (this.scrollY) this.updateDirection(\"y\", delta);\r\n if (stop) {\r\n Ticker.removeListener(\"update\", this.updateScrollPosition);\r\n this.animating = false;\r\n }\r\n };\r\n\r\n\r\n\r\n this.updateDirection = function (direction, delta) {\r\n var bounds = this.getInnerBounds();\r\n\r\n var min;\r\n if (direction == \"y\")\r\n min = Math.round(Math.min(0, this._height - bounds.height));\r\n else\r\n min = Math.round(Math.min(0, this._width - bounds.width));\r\n\r\n if (!this.scrolling && Math.round(Speed[direction]) !== 0) {\r\n targetPosition[direction] += Speed[direction];\r\n Speed[direction] = MathHelper.Lerp(Speed[direction], 0, (5 + 2.5 / Math.max(this.softness, 0.01)) * delta);\r\n\r\n if (targetPosition[direction] > 0) {\r\n targetPosition[direction] = 0;\r\n\r\n }\r\n else if (targetPosition[direction] < min) {\r\n targetPosition[direction] = min;\r\n\r\n }\r\n }\r\n\r\n if (!this.scrolling && Math.round(Speed[direction]) === 0 && (container[direction] > 0 || container[direction] < min)) {\r\n var target = Position[direction] > 0 ? 0 : min;\r\n Position[direction] = MathHelper.Lerp(Position[direction], target, (40 - (30 * this.softness)) * delta);\r\n stop = false;\r\n }\r\n else if (this.scrolling || Math.round(Speed[direction]) !== 0) {\r\n\r\n if (this.scrolling) {\r\n Speed[direction] = Position[direction] - lastPosition[direction];\r\n lastPosition.copy(Position);\r\n }\r\n if (targetPosition[direction] > 0) {\r\n Speed[direction] = 0;\r\n Position[direction] = 100 * this.softness * (1 - Math.exp(targetPosition[direction] / -200));\r\n }\r\n else if (targetPosition[direction] < min) {\r\n Speed[direction] = 0;\r\n Position[direction] = min - (100 * this.softness * (1 - Math.exp((min - targetPosition[direction]) / -200)));\r\n }\r\n else {\r\n Position[direction] = targetPosition[direction];\r\n }\r\n stop = false;\r\n }\r\n\r\n container.position[direction] = Math.round(Position[direction]);\r\n\r\n self.updateScrollBars();\r\n\r\n };\r\n\r\n\r\n //Drag scroll\r\n if (this.dragScrolling) {\r\n var drag = new DragEvent(this);\r\n drag.onDragStart = function (e) {\r\n if (!this.scrolling) {\r\n containerStart.copy(container.position);\r\n Position.copy(container.position);\r\n this.scrolling = true;\r\n this.setScrollPosition();\r\n }\r\n };\r\n\r\n drag.onDragMove = function (e, offset) {\r\n if (this.scrollX)\r\n targetPosition.x = containerStart.x + offset.x;\r\n if (this.scrollY)\r\n targetPosition.y = containerStart.y + offset.y;\r\n };\r\n\r\n drag.onDragEnd = function (e) {\r\n this.scrolling = false;\r\n };\r\n }\r\n\r\n //Mouse scroll\r\n var scrollSpeed = new PIXI.Point();\r\n var scroll = new MouseScrollEvent(this, true);\r\n scroll.onMouseScroll = function (e, delta) {\r\n scrollSpeed.set(-delta.x * 0.2, -delta.y * 0.2);\r\n this.setScrollPosition(scrollSpeed);\r\n };\r\n\r\n\r\n self.updateScrollBars();\r\n\r\n\r\n};\r\n\r\n\r\n\r\n\r\n","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * A sliced sprite with dynamic width and height.\r\n *\r\n * @class\r\n * @memberof PIXI.UI\r\n * @param Texture {PIXI.Texture} the texture for this SliceSprite\r\n * @param BorderWidth {Number} Width of the sprite borders\r\n * @param horizontalSlice {Boolean} Slice the sprite horizontically\r\n * @param verticalSlice {Boolean} Slice the sprite vertically\r\n * @param [tile=false] {Boolean} tile or streach\r\n */\r\nfunction SliceSprite(texture, borderWidth, horizontalSlice, verticalSlice, tile) {\r\n UIBase.call(this, texture.width, texture.height);\r\n\r\n var ftl, ftr, fbl, fbr, ft, fb, fl, fr, ff, stl, str, sbl, sbr, st, sb, sl, sr, sf,\r\n bw = borderWidth || 5,\r\n vs = typeof verticalSlice !== \"undefined\" ? verticalSlice : true,\r\n hs = typeof horizontalSlice !== \"undefined\" ? horizontalSlice : true,\r\n t = texture.baseTexture,\r\n f = texture.frame;\r\n\r\n\r\n if (hs) this.setting.minWidth = borderWidth * 2;\r\n if (vs) this.setting.minHeight = borderWidth * 2;\r\n\r\n this.initialize = function () {\r\n UIBase.prototype.initialize.apply(this);\r\n\r\n //get frames\r\n if (vs && hs) {\r\n ftl = new PIXI.Rectangle(f.x, f.y, bw, bw);\r\n ftr = new PIXI.Rectangle(f.x + f.width - bw, f.y, bw, bw);\r\n fbl = new PIXI.Rectangle(f.x, f.y + f.height - bw, bw, bw);\r\n fbr = new PIXI.Rectangle(f.x + f.width - bw, f.y + f.height - bw, bw, bw);\r\n ft = new PIXI.Rectangle(f.x + bw, f.y, f.width - bw * 2, bw);\r\n fb = new PIXI.Rectangle(f.x + bw, f.y + f.height - bw, f.width - bw * 2, bw);\r\n fl = new PIXI.Rectangle(f.x, f.y + bw, bw, f.height - bw * 2);\r\n fr = new PIXI.Rectangle(f.x + f.width - bw, f.y + bw, bw, f.height - bw * 2);\r\n ff = new PIXI.Rectangle(f.x + bw, f.y + bw, f.width - bw * 2, f.height - bw * 2);\r\n }\r\n else if (hs) {\r\n fl = new PIXI.Rectangle(f.x, f.y, bw, f.height);\r\n fr = new PIXI.Rectangle(f.x + f.width - bw, f.y, bw, f.height);\r\n ff = new PIXI.Rectangle(f.x + bw, f.y, f.width - bw * 2, f.height);\r\n }\r\n else { //vs\r\n ft = new PIXI.Rectangle(f.x, f.y, f.width, bw);\r\n fb = new PIXI.Rectangle(f.x, f.y + f.height - bw, f.width, bw);\r\n ff = new PIXI.Rectangle(f.x, f.y + bw, f.width, f.height - bw * 2);\r\n }\r\n\r\n //TODO: swap frames if rotation\r\n\r\n\r\n\r\n //make sprites\r\n sf = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, ff)) : new PIXI.Sprite(new PIXI.Texture(t, ff));\r\n this.container.addChildAt(sf, 0);\r\n if (vs && hs) {\r\n stl = new PIXI.Sprite(new PIXI.Texture(t, ftl));\r\n str = new PIXI.Sprite(new PIXI.Texture(t, ftr));\r\n sbl = new PIXI.Sprite(new PIXI.Texture(t, fbl));\r\n sbr = new PIXI.Sprite(new PIXI.Texture(t, fbr));\r\n this.container.addChildAt(stl, 0);\r\n this.container.addChildAt(str, 0);\r\n this.container.addChildAt(sbl, 0);\r\n this.container.addChildAt(sbr, 0);\r\n\r\n }\r\n if (hs) {\r\n sl = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, fl)) : new PIXI.Sprite(new PIXI.Texture(t, fl));\r\n sr = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, fr)) : new PIXI.Sprite(new PIXI.Texture(t, fr));\r\n this.container.addChildAt(sl, 0);\r\n this.container.addChildAt(sr, 0);\r\n }\r\n if (vs) {\r\n st = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, ft)) : new PIXI.Sprite(new PIXI.Texture(t, ft));\r\n sb = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, fb)) : new PIXI.Sprite(new PIXI.Texture(t, fb));\r\n this.container.addChildAt(st, 0);\r\n this.container.addChildAt(sb, 0);\r\n }\r\n\r\n //set constant position and sizes\r\n if (vs && hs) st.x = sb.x = sl.y = sr.y = stl.width = str.width = sbl.width = sbr.width = stl.height = str.height = sbl.height = sbr.height = bw;\r\n if (hs) sf.x = sl.width = sr.width = bw;\r\n if (vs) sf.y = st.height = sb.height = bw;\r\n };\r\n\r\n /**\r\n * Updates the sliced sprites position and size\r\n *\r\n * @private\r\n */\r\n this.update = function () {\r\n if (!this.initialized) return;\r\n if (vs && hs) {\r\n str.x = sbr.x = sr.x = this._width - bw;\r\n sbl.y = sbr.y = sb.y = this._height - bw;\r\n sf.width = st.width = sb.width = this._width - bw * 2;\r\n sf.height = sl.height = sr.height = this._height - bw * 2;\r\n }\r\n else if (hs) {\r\n sr.x = this._width - bw;\r\n sl.height = sr.height = sf.height = this._height;\r\n sf.width = this._width - bw * 2;\r\n }\r\n else { //vs\r\n sb.y = this._height - bw;\r\n st.width = sb.width = sf.width = this._width;\r\n sf.height = this._height - bw * 2;\r\n }\r\n\r\n if (this.tint !== null) {\r\n sf.tint = this.tint;\r\n if (vs && hs) stl.tint = str.tint = sbl.tint = sbr.tint = this.tint;\r\n if (hs) sl.tint = sr.tint = this.tint;\r\n if (vs) st.tint = sb.tint = this.tint;\r\n }\r\n\r\n if (this.blendMode !== null) {\r\n sf.blendMode = this.blendMode;\r\n if (vs && hs) stl.blendMode = str.blendMode = sbl.blendMode = sbr.blendMode = this.blendMode;\r\n if (hs) sl.blendMode = sr.blendMode = this.blendMode;\r\n if (vs) st.blendMode = sb.blendMode = this.blendMode;\r\n }\r\n };\r\n}\r\n\r\nSliceSprite.prototype = Object.create(UIBase.prototype);\r\nSliceSprite.prototype.constructor = SliceSprite;\r\nmodule.exports = SliceSprite;\r\n\r\n\r\n\r\n","var UIBase = require('./UIBase'),\r\n DragEvent = require('./Interaction/DragEvent'),\r\n ClickEvent = require('./Interaction/ClickEvent'),\r\n Tween = require('./Tween'),\r\n Ease = require('./Ease/Ease'),\r\n MathHelper = require('./MathHelper');\r\n\r\n/**\r\n* An UI Slider, the default width/height is 90%\r\n* \r\n* @class\r\n* @extends UIBase\r\n* @memberof PIXI.UI\r\n* @param options {Object} Slider settings\r\n* @param options.track {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} Any type of UIOBject, will be used for the slider track\r\n* @param options.handle {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as slider handle\r\n* @param [options.fill=null] {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used for slider fill\r\n* @param [options.vertical=false] {boolean} Direction of the slider\r\n* @param [options.value=0] {number} value of the slider\r\n* @param [options.minValue=0] {number} minimum value\r\n* @param [options.maxValue=100] {number} max value\r\n* @param [options.decimals=0] {boolean} the decimal precision (use negative to round tens and hundreds)\r\n* @param [options.onValueChange=null] {callback} Callback when the value has changed\r\n* @param [options.onValueChanging=null] {callback} Callback while the value is changing\r\n* \r\n* \r\n*/\r\nfunction Slider(options) {\r\n UIBase.call(this);\r\n this._amt = 0;\r\n this._disabled = false;\r\n\r\n //set options\r\n this.track = options.track;\r\n this.handle = options.handle;\r\n this.fill = options.fill || null;\r\n this._minValue = options.minValue || 0;\r\n this._maxValue = options.maxValue || 100;\r\n this.decimals = options.decimals || 0;\r\n this.vertical = options.vertical || false;\r\n this._onValueChange = options.onValueChange || null;\r\n this._onValueChanging = options.onValueChanging || null;\r\n this.value = options.value || 50;\r\n this.handle.pivot = 0.5;\r\n\r\n\r\n\r\n this.addChild(this.track);\r\n if (this.fill) this.track.addChild(this.fill);\r\n this.addChild(this.handle);\r\n this.handle.container.buttonMode = true;\r\n\r\n if (this.vertical) {\r\n this.height = \"100%\";\r\n this.width = this.track.width;\r\n this.track.height = \"100%\";\r\n this.handle.horizontalAlign = \"center\";\r\n if (this.fill) this.fill.horizontalAlign = \"center\";\r\n }\r\n else {\r\n this.width = \"100%\";\r\n this.height = this.track.height;\r\n this.track.width = \"100%\";\r\n this.handle.verticalAlign = \"middle\";\r\n if (this.fill) this.fill.verticalAlign = \"middle\";\r\n }\r\n\r\n}\r\n\r\nSlider.prototype = Object.create(UIBase.prototype);\r\nSlider.prototype.constructor = Slider;\r\nmodule.exports = Slider;\r\n\r\nSlider.prototype.update = function (soft) {\r\n var handleSize, val;\r\n\r\n if (this.vertical) {\r\n handleSize = this.handle._height || this.handle.container.height;\r\n val = ((this._height - handleSize) * this._amt) + (handleSize * 0.5);\r\n if (soft) {\r\n Tween.to(this.handle, 0.3, { top: val }, Ease.Power2.easeOut);\r\n if (this.fill) Tween.to(this.fill, 0.3, { height: val }, Ease.Power2.easeOut);\r\n }\r\n else {\r\n Tween.set(this.handle, { top: val });\r\n if (this.fill) Tween.set(this.fill, { height: val });\r\n }\r\n }\r\n else {\r\n handleSize = this.handle._width || this.handle.container.width;\r\n val = ((this._width - handleSize) * this._amt) + (handleSize * 0.5);\r\n if (soft) {\r\n Tween.to(this.handle, 0.3, { left: val }, Ease.Power2.easeOut);\r\n if (this.fill) Tween.to(this.fill, 0.3, { width: val }, Ease.Power2.easeOut);\r\n }\r\n else {\r\n Tween.set(this.handle, { left: val });\r\n if (this.fill) Tween.set(this.fill, { width: val });\r\n }\r\n }\r\n};\r\n\r\nSlider.prototype.initialize = function () {\r\n UIBase.prototype.initialize.call(this);\r\n\r\n\r\n\r\n var self = this;\r\n var startValue = 0;\r\n\r\n\r\n\r\n ////Handle dragging\r\n var handleDrag = new DragEvent(this.handle);\r\n handleDrag.onPress = function (event, isPressed) {\r\n event.stopPropagation();\r\n };\r\n\r\n handleDrag.onDragStart = function (event) {\r\n startValue = self._amt;\r\n maxPosition = self.vertical ? self._height - self.handle._height : self._width - self.handle._width;\r\n };\r\n\r\n handleDrag.onDragMove = function (event, offset) {\r\n\r\n self._amt = !maxPosition ? 0 : Math.max(0, Math.min(1, startValue + ((self.vertical ? offset.y : offset.x) / maxPosition)));\r\n\r\n triggerValueChanging();\r\n self.update();\r\n };\r\n\r\n handleDrag.onDragEnd = function () {\r\n triggerValueChange();\r\n self.update();\r\n };\r\n\r\n //Bar pressing/dragging\r\n var localMousePosition = new PIXI.Point();\r\n var trackDrag = new DragEvent(this.track);\r\n\r\n trackDrag.onPress = function (event, isPressed) {\r\n if (isPressed)\r\n updatePositionToMouse(event.data.global, true);\r\n event.stopPropagation();\r\n };\r\n\r\n trackDrag.onDragMove = function (event) {\r\n updatePositionToMouse(event.data.global, false);\r\n };\r\n\r\n trackDrag.onDragEnd = function () {\r\n triggerValueChange();\r\n };\r\n\r\n var updatePositionToMouse = function (mousePosition, soft) {\r\n self.track.container.toLocal(mousePosition, null, localMousePosition, true);\r\n\r\n var newPos = self.vertical ? localMousePosition.y - self.handle._height * 0.5 : localMousePosition.x - self.handle._width * 0.5;\r\n var maxPos = self.vertical ? self._height - self.handle._height : self._width - self.handle._width;\r\n self._amt = !maxPos ? 0 : Math.max(0, Math.min(1, newPos / maxPos));\r\n self.update(soft);\r\n triggerValueChanging();\r\n };\r\n\r\n var triggerValueChange = function () {\r\n self.emit(\"change\", self.value);\r\n if (self._lastChange != self.value) {\r\n self._lastChange = self.value;\r\n if (typeof self.onValueChange === \"function\")\r\n self.onValueChange(self.value);\r\n }\r\n };\r\n\r\n var triggerValueChanging = function () {\r\n self.emit(\"changeing\", self.value);\r\n if (self._lastChanging != self.value) {\r\n self._lastChanging = self.value;\r\n if (typeof self._onValueChanging === \"function\")\r\n self._onValueChanging(self.value);\r\n }\r\n };\r\n};\r\n\r\n\r\nObject.defineProperties(Slider.prototype, {\r\n value: {\r\n get: function () {\r\n return MathHelper.Round(MathHelper.Lerp(this._minValue, this._maxValue, this._amt), this.decimals);\r\n },\r\n set: function (val) {\r\n this._amt = (Math.max(this._minValue, Math.min(this._maxValue, val)) - this._minValue) / (this._maxValue - this._minValue);\r\n if (typeof this.onValueChange === \"function\")\r\n self.onValueChange(this.value);\r\n if (typeof this._onValueChanging === \"function\")\r\n this._onValueChanging(this.value);\r\n this.update();\r\n }\r\n },\r\n\r\n onValueChange: {\r\n get: function () {\r\n return this._onValueChange;\r\n },\r\n set: function (val) {\r\n this._onValueChange = val;\r\n }\r\n },\r\n onValueChanging: {\r\n get: function () {\r\n return this._onValueChanging;\r\n },\r\n set: function (val) {\r\n this._onValueChanging = val;\r\n }\r\n },\r\n minValue: {\r\n get: function () {\r\n return this._minValue;\r\n },\r\n set: function (val) {\r\n this._minValue = val;\r\n this.update();\r\n }\r\n },\r\n maxValue: {\r\n get: function () {\r\n return this._maxValue;\r\n },\r\n set: function (val) {\r\n this._maxValue = val;\r\n this.update();\r\n }\r\n },\r\n disabled: {\r\n get: function () {\r\n return this._disabled;\r\n },\r\n set: function (val) {\r\n if (val !== this._disabled) {\r\n this._disabled = val;\r\n this.handle.container.buttonMode = !val;\r\n this.handle.container.interactive = !val;\r\n this.track.container.interactive = !val;\r\n }\r\n }\r\n }\r\n});","var Container = require('./Container');\r\nvar Tween = require('./Tween');\r\n/**\r\n * An UI Container object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param desc {Boolean} Sort the list descending\r\n * @param tweenTime {Number} if above 0 the sort will be animated\r\n * @param tweenEase {PIXI.UI.Ease} ease method used for animation\r\n */\r\nfunction SortableList(desc, tweenTime, tweenEase) {\r\n Container.call(this);\r\n this.desc = typeof desc !== \"undefined\" ? desc : false;\r\n this.tweenTime = tweenTime || 0;\r\n this.tweenEase = tweenEase;\r\n this.items = [];\r\n\r\n}\r\n\r\nSortableList.prototype = Object.create(Container.prototype);\r\nSortableList.prototype.constructor = SortableList;\r\nmodule.exports = SortableList;\r\n\r\nSortableList.prototype.addChild = function (UIObject, fnValue, fnThenBy) {\r\n Container.prototype.addChild.call(this, UIObject);\r\n if (this.items.indexOf(UIObject) == -1) {\r\n this.items.push(UIObject);\r\n }\r\n\r\n if (typeof fnValue === \"function\")\r\n UIObject._sortListValue = fnValue;\r\n\r\n if (typeof fnThenBy === \"function\")\r\n UIObject._sortListThenByValue = fnThenBy;\r\n\r\n if (!UIObject._sortListRnd)\r\n UIObject._sortListRnd = Math.random();\r\n\r\n\r\n\r\n this.sort();\r\n};\r\n\r\nSortableList.prototype.removeChild = function (UIObject) {\r\n if (arguments.length > 1) {\r\n for (var i = 0; i < arguments.length; i++) {\r\n this.removeChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n Container.prototype.removeChild.call(this, UIObject);\r\n var index = this.items.indexOf(UIObject);\r\n if (index != -1) {\r\n this.items.splice(index, 1);\r\n }\r\n this.sort();\r\n }\r\n};\r\n\r\nSortableList.prototype.sort = function (instant) {\r\n clearTimeout(this._sortTimeout);\r\n\r\n if (instant) {\r\n this._sort();\r\n return;\r\n }\r\n\r\n var _this = this;\r\n this._sortTimeout = setTimeout(function () { _this._sort(); }, 0);\r\n};\r\n\r\nSortableList.prototype._sort = function () {\r\n var self = this,\r\n desc = this.desc,\r\n y = 0,\r\n alt = true;\r\n\r\n this.items.sort(function (a, b) {\r\n var res = a._sortListValue() < b._sortListValue() ? desc ? 1 : -1 :\r\n a._sortListValue() > b._sortListValue() ? desc ? -1 : 1 : 0;\r\n\r\n if (res === 0 && a._sortListThenByValue && b._sortListThenByValue) {\r\n res = a._sortListThenByValue() < b._sortListThenByValue() ? desc ? 1 : -1 :\r\n a._sortListThenByValue() > b._sortListThenByValue() ? desc ? -1 : 1 : 0;\r\n }\r\n if (res === 0) {\r\n res = a._sortListRnd > b._sortListRnd ? 1 :\r\n a._sortListRnd < b._sortListRnd ? -1 : 0;\r\n }\r\n return res;\r\n });\r\n\r\n for (var i = 0; i < this.items.length; i++) {\r\n var item = this.items[i];\r\n\r\n alt = !alt;\r\n\r\n if (this.tweenTime > 0) {\r\n Tween.fromTo(item, this.tweenTime, { x: item.x, y: item.y }, { x: 0, y: y }, this.tweenEase);\r\n }\r\n else {\r\n item.x = 0;\r\n item.y = y;\r\n }\r\n y += item.height;\r\n if (typeof item.altering === \"function\")\r\n item.altering(alt);\r\n }\r\n\r\n //force it to update parents when sort animation is done (prevent scrolling container bug)\r\n if (this.tweenTime > 0) {\r\n setTimeout(function () {\r\n self.updatesettings(false, true);\r\n }, this.tweenTime * 1000);\r\n }\r\n};\r\n\r\n\r\n","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * An UI sprite object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param Texture {PIXI.Texture} The texture for the sprite\r\n */\r\nfunction Sprite(t) {\r\n this.sprite = new PIXI.Sprite(t);\r\n UIBase.call(this, this.sprite.width, this.sprite.height);\r\n this.container.addChild(this.sprite);\r\n}\r\n\r\nSprite.prototype = Object.create(UIBase.prototype);\r\nSprite.prototype.constructor = Sprite;\r\nmodule.exports = Sprite;\r\n\r\n\r\nSprite.fromFrame = function (frameId) {\r\n return new Sprite(new PIXI.Texture.fromFrame(frameId));\r\n};\r\n\r\nSprite.fromImage = function (imageUrl) {\r\n return new Sprite(new PIXI.Texture.fromImage(imageUrl));\r\n};\r\n\r\n/**\r\n * Updates the text\r\n *\r\n * @private\r\n */\r\nSprite.prototype.update = function () {\r\n if (this.tint !== null)\r\n this.sprite.tint = this.tint;\r\n\r\n if (this.blendMode !== null)\r\n this.sprite.blendMode = this.blendMode;\r\n\r\n this.sprite.width = this._width;\r\n this.sprite.height = this._height;\r\n};\r\n\r\n","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * A Stage for UIObjects\r\n *\r\n * @class\r\n * @extends PIXI.UI.Container\r\n * @memberof PIXI.UI\r\n * @param width {Number} Width of the Stage\r\n * @param height {Number} Height of the Stage\r\n */\r\nfunction Stage(width, height) {\r\n PIXI.Container.call(this);\r\n this.__width = width;\r\n this.__height = height;\r\n this.minWidth = 0;\r\n this.minHeight = 0;\r\n\r\n this.UIChildren = [];\r\n this.stage = this;\r\n this.interactive = true;\r\n this.hitArea = new PIXI.Rectangle(0, 0, 0, 0);\r\n this.initialized = true;\r\n}\r\n\r\nStage.prototype = Object.create(PIXI.Container.prototype);\r\nStage.prototype.constructor = Stage;\r\nmodule.exports = Stage;\r\n\r\nStage.prototype.addChild = function (UIObject) {\r\n var argumentLenght = arguments.length;\r\n if (argumentLenght > 1) {\r\n for (var i = 0; i < argumentLenght; i++) {\r\n this.addChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n if (UIObject.parent !== null)\r\n UIObject.parent.removeChild(UIObject);\r\n\r\n UIObject.parent = this;\r\n this.UIChildren.push(UIObject);\r\n PIXI.Container.prototype.addChild.call(this, UIObject.container);\r\n UIObject.updatesettings(true);\r\n }\r\n};\r\n\r\nStage.prototype.removeChild = function (UIObject) {\r\n var argumentLenght = arguments.length;\r\n if (argumentLenght > 1) {\r\n for (var i = 0; i < argumentLenght; i++) {\r\n this.removeChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n PIXI.Container.prototype.removeChild.call(this, UIObject.container);\r\n var index = this.UIChildren.indexOf(UIObject);\r\n if (index != -1) {\r\n this.UIChildren.splice(index, 1);\r\n UIObject.parent = null;\r\n }\r\n\r\n }\r\n};\r\n\r\nStage.prototype.resize = function (width, height) {\r\n if (!isNaN(height)) this.__height = height;\r\n if (!isNaN(width)) this.__width = width;\r\n\r\n if (this.minWidth || this.minHeight) {\r\n var rx = 1,\r\n ry = 1;\r\n\r\n if (width && width < this.minWidth) {\r\n rx = this.minWidth / width;\r\n }\r\n\r\n if (height && height < this.minHeight) {\r\n ry = this.minHeight / height;\r\n }\r\n\r\n if (rx > ry && rx > 1) {\r\n this.scale.set(1 / rx);\r\n this.__height *= rx;\r\n this.__width *= rx;\r\n }\r\n else if (ry > 1) {\r\n this.scale.set(1 / ry);\r\n this.__width *= ry;\r\n this.__height *= ry;\r\n }\r\n else if (this.scale.x !== 1) {\r\n this.scale.set(1);\r\n }\r\n }\r\n\r\n this.hitArea.width = this.__width;\r\n this.hitArea.height = this.__height;\r\n\r\n for (var i = 0; i < this.UIChildren.length; i++)\r\n this.UIChildren[i].updatesettings(true, false);\r\n};\r\n\r\nObject.defineProperties(Stage.prototype, {\r\n _width: {\r\n get: function () {\r\n return this.__width;\r\n },\r\n set: function (val) {\r\n if (!isNaN(val)) {\r\n this.__width = val;\r\n this.resize();\r\n }\r\n }\r\n },\r\n _height: {\r\n get: function () {\r\n return this.__height;\r\n },\r\n set: function (val) {\r\n if (!isNaN(val)) {\r\n this.__height = val;\r\n this.resize();\r\n }\r\n }\r\n }\r\n});","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * An UI text object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param Text {String} Text content\r\n * @param TextStyle {PIXI.TextStyle} Style used for the Text\r\n */\r\nfunction Text(text, PIXITextStyle) {\r\n this._text = new PIXI.Text(text, PIXITextStyle);\r\n UIBase.call(this, this._text.width, this._text.height);\r\n this.container.addChild(this._text);\r\n\r\n this.baseupdate = function () {\r\n //force original text width unless using anchors\r\n if (this._anchorLeft === null || this._anchorRight === null) {\r\n this.setting.width = this._text.width;\r\n this.setting.widthPct = null;\r\n }\r\n else {\r\n this._text.width = this._width;\r\n }\r\n\r\n //force original text height unless using anchors\r\n if (this._anchorTop === null || this._anchorBottom === null) {\r\n this.setting.height = this._text.height;\r\n this.setting.heightPct = null;\r\n }\r\n else {\r\n this._text.width = this._width;\r\n }\r\n\r\n\r\n UIBase.prototype.baseupdate.call(this);\r\n };\r\n\r\n this.update = function () {\r\n //set tint\r\n if (this.tint !== null)\r\n this._text.tint = this.tint;\r\n\r\n //set blendmode\r\n if (this.blendMode !== null)\r\n this._text.blendMode = this.blendMode;\r\n };\r\n}\r\n\r\nText.prototype = Object.create(UIBase.prototype);\r\nText.prototype.constructor = Text;\r\nmodule.exports = Text;\r\n\r\n\r\nObject.defineProperties(Text.prototype, {\r\n value: {\r\n get: function () {\r\n return this._text.text;\r\n },\r\n set: function (val) {\r\n this._text.text = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n text: {\r\n get: function () {\r\n return this.value;\r\n },\r\n set: function (val) {\r\n this.value = val;\r\n }\r\n }\r\n});","var InputBase = require('./InputBase'),\r\n Container = require('./Container'),\r\n DragEvent = require('./Interaction/DragEvent');\r\n\r\n/**\r\n * An UI text object\r\n *\r\n * @class\r\n * @extends PIXI.UI.InputBase\r\n * @memberof PIXI.UI\r\n * @param options.value {String} Text content\r\n * @param [options.multiLine=false] {Boolean} Multiline input\r\n * @param options.style {PIXI.TextStyle} Style used for the Text\r\n * @param options.background {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for input\r\n * @param [options.selectedColor='#ffffff'] {String|Array} Fill color of selected text\r\n * @param [options.selectedBackgroundColor='#318cfa'] {String} BackgroundColor of selected text\r\n * @param [options.width=150] {Number} width of input\r\n * @param [options.height=20] {Number} height of input\r\n * @param [options.padding=3] {Number} input padding\r\n * @param [options.paddingTop=0] {Number} input padding\r\n * @param [options.paddingBottom=0] {Number} input padding\r\n * @param [options.paddingLeft=0] {Number} input padding\r\n * @param [options.paddingRight=0] {Number} input padding\r\n * @param [options.tabIndex=0] {Number} input tab index\r\n * @param [options.tabGroup=0] {Number|String} input tab group\r\n * @param [options.maxLength=0] {Number} 0 = unlimited\r\n * @param [options.caretWidth=1] {Number} width of the caret\r\n * @param [options.lineHeight=0] {Number} 0 = inherit from text\r\n */\r\nfunction TextInput(options) {\r\n //create temp input (for mobile keyboard)\r\n if (typeof _pui_tempInput === \"undefined\") {\r\n _pui_tempInput = document.createElement(\"INPUT\");\r\n _pui_tempInput.setAttribute(\"type\", \"text\");\r\n _pui_tempInput.setAttribute(\"id\", \"_pui_tempInput\");\r\n _pui_tempInput.setAttribute(\"style\", \"position:fixed; left:-10px; top:-10px; width:0px; height: 0px;\");\r\n document.body.appendChild(_pui_tempInput);\r\n }\r\n\r\n\r\n InputBase.call(this, options.width || options.background ? options.background.width : 150, options.height || options.background ? options.background.height : 20, options.tabIndex || 0, options.tabGroup || 0);\r\n this._dirtyText = true;\r\n this.maxLength = options.maxLength || 0;\r\n this._value = this._lastValue = options.value || \"\";\r\n\r\n if (this.maxLength) this._value = this._value.slice(0, this.maxLength);\r\n\r\n var self = this;\r\n var chars = [];\r\n var multiLine = options.multiLine !== undefined ? options.multiLine : false;\r\n var color = options.style && options.style.fill ? options.style.fill : \"#000000\";\r\n var selectedColor = options.selectedColor || \"#ffffff\";\r\n var selectedBackgroundColor = options.selectedBackgroundColor || \"#318cfa\";\r\n var tempText = new PIXI.Text(\"1\", options.style);\r\n var textHeight = tempText.height;\r\n var lineHeight = options.lineHeight || textHeight || self._height;\r\n tempText.destroy();\r\n\r\n\r\n //set cursor\r\n //this.container.cursor = \"text\";\r\n\r\n //selection graphics\r\n var selection = self.selection = new PIXI.Graphics();\r\n selection.visible = false;\r\n selection._startIndex = 0;\r\n selection._endIndex = 0;\r\n\r\n //caret graphics\r\n var caret = self.caret = new PIXI.Graphics();\r\n caret.visible = false;\r\n caret._index = 0;\r\n caret.lineStyle(options.caretWidth || 1, \"#ffffff\", 1);\r\n caret.moveTo(0, 0);\r\n caret.lineTo(0, textHeight);\r\n\r\n\r\n //insert bg\r\n if (options.background) {\r\n this.background = options.background;\r\n this.background.width = \"100%\";\r\n this.background.height = \"100%\";\r\n this.addChild(this.background);\r\n }\r\n\r\n //var padding\r\n var paddingLeft = options.paddingLeft !== undefined ? options.paddingLeft : options.padding !== undefined ? options.padding : 3;\r\n var paddingRight = options.paddingRight !== undefined ? options.paddingRight : options.padding !== undefined ? options.padding : 3;\r\n var paddingBottom = options.paddingBottom !== undefined ? options.paddingBottom : options.padding !== undefined ? options.padding : 3;\r\n var paddingTop = options.paddingTop !== undefined ? options.paddingTop : options.padding !== undefined ? options.padding : 3;\r\n\r\n //insert text container (scrolling container)\r\n var textContainer = this.textContainer = new PIXI.UI.ScrollingContainer({\r\n scrollX: !multiLine,\r\n scrollY: multiLine,\r\n dragScrolling: multiLine,\r\n expandMask: 2,\r\n softness: 0.2,\r\n overflowX: 40,\r\n overflowY: 40\r\n });\r\n textContainer.anchorTop = paddingTop;\r\n textContainer.anchorBottom = paddingBottom;\r\n textContainer.anchorLeft = paddingLeft;\r\n textContainer.anchorRight = paddingRight;\r\n this.addChild(textContainer);\r\n\r\n if (multiLine) {\r\n this._useNext = this._usePrev = false;\r\n textContainer.dragRestrictAxis = \"y\";\r\n textContainer.dragThreshold = 5;\r\n this.dragRestrictAxis = \"x\";\r\n this.dragThreshold = 5;\r\n\r\n }\r\n\r\n\r\n var innerContainer = textContainer.innerContainer;\r\n innerContainer.cacheAsBitmap = true;\r\n //textContainer.container.addChild(innerContainer);\r\n\r\n\r\n this.update = function () {\r\n if (this._width != this._lastWidth) {\r\n this._lastWidth = this._width;\r\n if (multiLine) {\r\n updateText();\r\n if (caret.visible) self.setCaretIndex(caret._index);\r\n if (hasSelection) updateSelectionGraphics();\r\n }\r\n\r\n }\r\n\r\n //update text \r\n if (this._dirtyText) {\r\n updateText();\r\n this._dirtyText = false;\r\n }\r\n };\r\n\r\n //selection Vars\r\n var caretInterval, //interval for flash\r\n si, //startIndex\r\n sie, //startIndexEnd\r\n ei, //endIndex\r\n eie, //endIndexEnd\r\n sp = new PIXI.Point(), //startposition\r\n ds = new PIXI.Point(), //dragStart\r\n de = new PIXI.Point(), //dragend\r\n rdd = false, //Reverse drag direction\r\n vrdd = false, //vertical Reverse drag direction\r\n selectionStart = -1,\r\n selectionEnd = -1,\r\n hasSelection = false,\r\n t = performance.now(), //timestamp\r\n cc = 0, //click counter\r\n textLengthPX = 0,\r\n textHeightPX = 0,\r\n lineIndexMax = 0,\r\n ctrlDown = false,\r\n shiftDown = false,\r\n shiftKey = 16,\r\n ctrlKey = 17,\r\n cmdKey = 91;\r\n\r\n\r\n\r\n var updateText = function () {\r\n textLengthPX = 0;\r\n textHeightPX = 0;\r\n lineIndexMax = 0;\r\n\r\n var lineIndex = 0,\r\n length = self._value.length,\r\n x = 0,\r\n y = (lineHeight - textHeight) * 0.5,\r\n i = 0;\r\n\r\n //destroy excess chars\r\n if (chars.length > length) {\r\n for (i = chars.length - 1; i >= length; i--) {\r\n innerContainer.removeChild(chars[i]);\r\n chars[i].destroy();\r\n }\r\n chars.splice(length, chars.length - length);\r\n }\r\n\r\n //update and add chars\r\n var whitespace = false;\r\n var newline = false;\r\n var wordIndex = 0;\r\n var lastWordIndex = -1;\r\n var wrap = false;\r\n for (i = 0; i < self._value.length; i++) {\r\n if (whitespace || newline) {\r\n lastWordIndex = i;\r\n wordIndex++;\r\n }\r\n\r\n var c = self._value[i];\r\n whitespace = c === \" \";\r\n newline = c === \"\\n\";\r\n\r\n\r\n if (newline) { //newline \"hack\". webgl render errors if \\n is passed to text\r\n c = \"\";\r\n }\r\n\r\n\r\n\r\n var charText = chars[i];\r\n if (!charText) {\r\n charText = new PIXI.Text(c, options.style);\r\n innerContainer.addChild(charText);\r\n chars.push(charText);\r\n }\r\n else {\r\n charText.text = c;\r\n }\r\n\r\n charText.scale.x = newline ? 0 : 1;\r\n charText.wrapped = wrap;\r\n wrap = false;\r\n\r\n if (newline || (multiLine && x + charText.width >= self._width - paddingLeft - paddingRight)) {\r\n lineIndex++;\r\n x = 0;\r\n y += lineHeight;\r\n\r\n if (lastWordIndex != -1 && !newline) {\r\n i = lastWordIndex - 1;\r\n lastWordIndex = -1;\r\n wrap = true;\r\n continue;\r\n }\r\n }\r\n\r\n\r\n charText.lineIndex = lineIndex;\r\n charText.x = x;\r\n charText.y = y;\r\n charText.wordIndex = whitespace || newline ? -1 : wordIndex;\r\n x += charText.width;\r\n\r\n\r\n if (x > textLengthPX)\r\n textLengthPX = x;\r\n if (y > textHeightPX)\r\n textHeightPX = y;\r\n }\r\n\r\n lineIndexMax = lineIndex;\r\n\r\n //put caret on top\r\n innerContainer.addChild(caret);\r\n\r\n //recache\r\n if (innerContainer.cacheAsBitmap) {\r\n innerContainer.cacheAsBitmap = false;\r\n innerContainer.cacheAsBitmap = true;\r\n }\r\n\r\n textContainer.update();\r\n\r\n };\r\n\r\n var updateClosestIndex = function (point, start) {\r\n var currentDistX = 99999;\r\n var currentClosest;\r\n var currentIndex = -1;\r\n var atEnd = false;\r\n\r\n var closestLineIndex = 0;\r\n if (lineIndexMax > 0)\r\n closestLineIndex = Math.max(0, Math.min(lineIndexMax, Math.floor(point.y / lineHeight)));\r\n\r\n\r\n\r\n\r\n\r\n for (var i = 0; i < chars.length; i++) {\r\n var char = chars[i];\r\n if (char.lineIndex != closestLineIndex) continue;\r\n\r\n var distX = Math.abs(point.x - (char.x + (char.width * 0.5)));\r\n if (distX < currentDistX) {\r\n currentDistX = distX;\r\n currentClosest = char;\r\n currentIndex = i;\r\n atEnd = point.x > char.x + (char.width * 0.5);\r\n }\r\n }\r\n\r\n\r\n if (start) {\r\n si = currentIndex;\r\n sie = atEnd;\r\n }\r\n else {\r\n ei = currentIndex;\r\n eie = atEnd;\r\n }\r\n };\r\n\r\n var deleteSelection = function () {\r\n if (hasSelection) {\r\n self.value = self.value.slice(0, selectionStart) + self.value.slice(selectionEnd + 1);\r\n self.setCaretIndex(selectionStart);\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n var updateSelectionColors = function () {\r\n //Color charecters\r\n for (var i = 0; i < chars.length; i++) {\r\n if (i >= selectionStart && i <= selectionEnd)\r\n chars[i].style.fill = selectedColor;\r\n else\r\n chars[i].style.fill = color;\r\n }\r\n };\r\n\r\n var _sp = new PIXI.Point();\r\n var scrollToPosition = function (pos) {\r\n _sp.copy(pos);\r\n if (multiLine && _sp.y >= lineHeight)\r\n _sp.y += lineHeight;\r\n textContainer.focusPosition(_sp);\r\n };\r\n\r\n var resetScrollPosition = function () {\r\n _sp.set(0, 0);\r\n textContainer.focusPosition(_sp);\r\n };\r\n\r\n //caret\r\n var hideCaret = function () {\r\n caret.visible = false;\r\n clearInterval(caretInterval);\r\n };\r\n\r\n var showCaret = function () {\r\n self.clearSelection();\r\n clearInterval(caretInterval);\r\n caret.alpha = 1;\r\n caret.visible = true;\r\n caretInterval = setInterval(function () {\r\n caret.alpha = caret.alpha === 0 ? 1 : 0;\r\n }, 500);\r\n\r\n };\r\n\r\n var insertTextAtCaret = function (c) {\r\n if (hasSelection)\r\n deleteSelection();\r\n if (!self.maxLength || chars.length < self.maxLength) {\r\n\r\n if (caret._atEnd) {\r\n self.value += c;\r\n self.setCaretIndex(chars.length);\r\n }\r\n else {\r\n var index = Math.min(chars.length - 1, caret._index);\r\n self.value = self.value.slice(0, index) + c + self.value.slice(index);\r\n self.setCaretIndex(index + c.length);\r\n }\r\n }\r\n };\r\n\r\n //events\r\n var keyDownEvent = function (e) {\r\n if (e.which === ctrlKey || e.which === cmdKey) ctrlDown = true;\r\n if (e.which === shiftKey) shiftDown = true;\r\n\r\n if (e.which === 13) { //enter\r\n insertTextAtCaret('\\n');\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n if (ctrlDown) {\r\n\r\n //ctrl + ?\r\n if (e.which === 65) { //ctrl + a\r\n self.select();\r\n e.preventDefault();\r\n return;\r\n }\r\n else if (e.which === 90) { //ctrl + z (undo)\r\n if (self.value != self._lastValue)\r\n self.value = self._lastValue;\r\n self.setCaretIndex(self._lastValue.length + 1);\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n }\r\n if (e.which === 8) {\r\n //backspace\r\n if (!deleteSelection()) {\r\n if (caret._index > 0 || (chars.length === 1 && caret._atEnd)) {\r\n if (caret._atEnd) {\r\n self.value = self.value.slice(0, chars.length - 1);\r\n self.setCaretIndex(caret._index);\r\n }\r\n else {\r\n self.value = self.value.slice(0, caret._index - 1) + self.value.slice(caret._index);\r\n self.setCaretIndex(caret._index - 1);\r\n }\r\n }\r\n }\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n if (e.which === 46) {\r\n //delete\r\n if (!deleteSelection()) {\r\n if (!caret._atEnd) {\r\n self.value = self.value.slice(0, caret._index) + self.value.slice(caret._index + 1);\r\n self.setCaretIndex(caret._index);\r\n }\r\n }\r\n e.preventDefault();\r\n return;\r\n }\r\n else if (e.which === 37 || e.which === 39) {\r\n rdd = e.which === 37;\r\n if (shiftDown) {\r\n if (hasSelection) {\r\n var caretAtStart = selectionStart === caret._index;\r\n if (caretAtStart) {\r\n if (selectionStart === selectionEnd && rdd === caret._forward) {\r\n self.setCaretIndex(caret._forward ? caret._index : caret._index + 1);\r\n }\r\n else {\r\n var startindex = rdd ? caret._index - 1 : caret._index + 1;\r\n self.selectRange(startindex, selectionEnd);\r\n caret._index = Math.min(chars.length - 1, Math.max(0, startindex));\r\n }\r\n }\r\n else {\r\n var endIndex = rdd ? caret._index - 1 : caret._index + 1;\r\n self.selectRange(selectionStart, endIndex);\r\n caret._index = Math.min(chars.length - 1, Math.max(0, endIndex));\r\n }\r\n }\r\n else {\r\n var _i = caret._atEnd ? caret._index + 1 : caret._index;\r\n var selectIndex = rdd ? _i - 1 : _i;\r\n self.selectRange(selectIndex, selectIndex);\r\n caret._index = selectIndex;\r\n caret._forward = !rdd;\r\n }\r\n }\r\n else {\r\n //Navigation\r\n if (hasSelection)\r\n self.setCaretIndex(rdd ? selectionStart : selectionEnd + 1);\r\n else\r\n self.setCaretIndex(caret._index + (rdd ? caret._atEnd ? 0 : -1 : 1));\r\n }\r\n e.preventDefault();\r\n return;\r\n\r\n }\r\n else if (multiLine && (e.which === 38 || e.which === 40)) {\r\n vrdd = e.which === 38;\r\n if (shiftDown) {\r\n if (hasSelection) {\r\n de.y = Math.max(0, Math.min(textHeightPX, de.y + (vrdd ? -lineHeight : lineHeight)));\r\n updateClosestIndex(de, false);\r\n console.log(si, ei);\r\n if (Math.abs(si - ei) <= 1) {\r\n console.log(si, ei);\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n } else {\r\n caret._index = (eie ? ei + 1 : ei) + (caret._down ? -1 : 0);\r\n self.selectRange(caret._down ? si : si - 1, caret._index);\r\n }\r\n\r\n }\r\n else {\r\n si = caret._index;\r\n sie = false;\r\n de.copy(caret);\r\n de.y = Math.max(0, Math.min(textHeightPX, de.y + (vrdd ? -lineHeight : lineHeight)));\r\n updateClosestIndex(de, false);\r\n caret._index = (eie ? ei + 1 : ei) - (vrdd ? 0 : 1);\r\n self.selectRange(vrdd ? si - 1 : si, caret._index);\r\n caret._down = !vrdd;\r\n }\r\n }\r\n else {\r\n if (hasSelection) {\r\n self.setCaretIndex(vrdd ? selectionStart : selectionEnd + 1);\r\n }\r\n else {\r\n ds.copy(caret);\r\n ds.y += vrdd ? -lineHeight : lineHeight;\r\n ds.x += 1;\r\n updateClosestIndex(ds, true);\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n }\r\n }\r\n e.preventDefault();\r\n return;\r\n }\r\n };\r\n\r\n var keyUpEvent = function (e) {\r\n if (e.which == ctrlKey || e.which == cmdKey) ctrlDown = false;\r\n if (e.which === shiftKey) shiftDown = false;\r\n };\r\n\r\n var copyEvent = function (e) {\r\n if (hasSelection) {\r\n var clipboardData = e.clipboardData || window.clipboardData;\r\n clipboardData.setData('Text', self.value.slice(selectionStart, selectionEnd + 1));\r\n }\r\n e.preventDefault();\r\n };\r\n\r\n var cutEvent = function (e) {\r\n if (hasSelection) {\r\n copyEvent(e);\r\n deleteSelection();\r\n }\r\n e.preventDefault();\r\n };\r\n\r\n var pasteEvent = function (e) {\r\n var clipboardData = e.clipboardData || window.clipboardData;\r\n insertTextAtCaret(clipboardData.getData('Text'));\r\n e.preventDefault();\r\n };\r\n\r\n var inputEvent = function (e) {\r\n insertTextAtCaret(e.data);\r\n e.preventDefault();\r\n };\r\n\r\n var inputBlurEvent = function (e) {\r\n self.blur();\r\n };\r\n\r\n var event = new DragEvent(this);\r\n\r\n event.onPress = function (e, mouseDown) {\r\n\r\n if (mouseDown) {\r\n var timeSinceLast = performance.now() - t;\r\n t = performance.now();\r\n if (timeSinceLast < 250) {\r\n cc++;\r\n if (cc > 1)\r\n this.select();\r\n else {\r\n innerContainer.toLocal(sp, undefined, ds, true);\r\n updateClosestIndex(ds, true);\r\n var c = chars[si];\r\n if (c) {\r\n if (c.wordIndex != -1)\r\n this.selectWord(c.wordIndex);\r\n else\r\n this.selectRange(si, si);\r\n }\r\n }\r\n }\r\n else {\r\n cc = 0;\r\n sp.copy(e.data.global);\r\n innerContainer.toLocal(sp, undefined, ds, true);\r\n if (chars.length) {\r\n updateClosestIndex(ds, true);\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n }\r\n }\r\n }\r\n e.data.originalEvent.preventDefault();\r\n };\r\n\r\n event.onDragMove = function (e, offset) {\r\n if (!chars.length || !this._focused) return;\r\n\r\n de.x = sp.x + offset.x;\r\n de.y = sp.y + offset.y;\r\n innerContainer.toLocal(de, undefined, de, true);\r\n updateClosestIndex(de, false);\r\n\r\n if (si < ei) {\r\n self.selectRange(sie ? si + 1 : si, eie ? ei : ei - 1);\r\n caret._index = eie ? ei : ei - 1;\r\n }\r\n else if (si > ei) {\r\n self.selectRange(ei, sie ? si : si - 1);\r\n caret._index = ei;\r\n }\r\n else {\r\n if (sie === eie) {\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n }\r\n else {\r\n self.selectRange(si, ei);\r\n caret._index = ei;\r\n }\r\n }\r\n\r\n caret._forward = si <= ei;\r\n caret._down = offset.y > 0;\r\n\r\n scrollToPosition(de);\r\n };\r\n\r\n\r\n\r\n\r\n //public methods\r\n this.focus = function () {\r\n if (!this._focused) {\r\n InputBase.prototype.focus.call(this);\r\n\r\n var l = this.container.worldTransform.tx + \"px\";\r\n var t = this.container.worldTransform.ty + \"px\";\r\n var h = this.container.height + \"px\";\r\n var w = this.container.width + \"px\";\r\n\r\n _pui_tempInput.setAttribute(\"style\", \"position:fixed; left:\" + l + \"; top:\" + t + \"; height:\" + h + \"; width:\" + w + \";\");\r\n _pui_tempInput.value = \"\";\r\n _pui_tempInput.focus();\r\n _pui_tempInput.setAttribute(\"style\", \"position:fixed; left:-10px; top:-10px; width:0px; height: 0px;\");\r\n\r\n innerContainer.cacheAsBitmap = false;\r\n _pui_tempInput.addEventListener(\"blur\", inputBlurEvent, false);\r\n document.addEventListener(\"keydown\", keyDownEvent, false);\r\n document.addEventListener(\"keyup\", keyUpEvent, false);\r\n document.addEventListener('paste', pasteEvent, false);\r\n document.addEventListener('copy', copyEvent, false);\r\n document.addEventListener('cut', cutEvent, false);\r\n _pui_tempInput.addEventListener('textInput', inputEvent, false);\r\n\r\n setTimeout(function () {\r\n if (!caret.visible && !self.selection.visible && !multiLine)\r\n self.setCaretIndex(chars.length);\r\n }, 0);\r\n\r\n }\r\n\r\n };\r\n\r\n this.blur = function () {\r\n if (this._focused) {\r\n InputBase.prototype.blur.call(this);\r\n ctrlDown = false;\r\n shiftDown = false;\r\n hideCaret();\r\n this.clearSelection();\r\n if (chars.length > 1) innerContainer.cacheAsBitmap = true;\r\n _pui_tempInput.removeEventListener(\"blur\", inputBlurEvent);\r\n document.removeEventListener(\"keydown\", keyDownEvent);\r\n document.removeEventListener(\"keyup\", keyUpEvent);\r\n document.removeEventListener('paste', pasteEvent);\r\n document.removeEventListener('copy', copyEvent);\r\n document.removeEventListener('cut', cutEvent);\r\n _pui_tempInput.removeEventListener('textInput', inputEvent);\r\n _pui_tempInput.blur();\r\n\r\n }\r\n\r\n if (!multiLine)\r\n resetScrollPosition();\r\n };\r\n\r\n this.setCaretIndex = function (index) {\r\n caret._atEnd = index >= chars.length;\r\n caret._index = Math.max(0, Math.min(chars.length - 1, index));\r\n\r\n if (chars.length && index > 0) {\r\n\r\n var i = Math.max(0, Math.min(index, chars.length - 1));\r\n var c = chars[i];\r\n\r\n if (c && c.wrapped) {\r\n caret.x = c.x;\r\n caret.y = c.y;\r\n }\r\n else {\r\n i = Math.max(0, Math.min(index - 1, chars.length - 1));\r\n c = chars[i];\r\n caret.x = chars[i].x + chars[i].width;\r\n caret.y = (chars[i].lineIndex * lineHeight) + (lineHeight - textHeight) * 0.5;\r\n }\r\n }\r\n else {\r\n caret.x = 0;\r\n caret.y = (lineHeight - textHeight) * 0.5;\r\n }\r\n\r\n scrollToPosition(caret);\r\n showCaret();\r\n\r\n };\r\n\r\n this.select = function () {\r\n this.selectRange(0, chars.length - 1);\r\n };\r\n\r\n this.selectWord = function (wordIndex) {\r\n var startIndex = chars.length;\r\n var endIndex = 0;\r\n for (var i = 0; i < chars.length; i++) {\r\n if (chars[i].wordIndex !== wordIndex) continue;\r\n if (i < startIndex)\r\n startIndex = i;\r\n if (i > endIndex)\r\n endIndex = i;\r\n }\r\n\r\n this.selectRange(startIndex, endIndex);\r\n };\r\n\r\n var drawSelectionRect = function (x, y, w, h) {\r\n self.selection.beginFill(\"0x\" + selectedBackgroundColor.slice(1), 1);\r\n self.selection.moveTo(x, y);\r\n self.selection.lineTo(x + w, y);\r\n self.selection.lineTo(x + w, y + h);\r\n self.selection.lineTo(x, y + h);\r\n self.selection.endFill();\r\n };\r\n\r\n var updateSelectionGraphics = function () {\r\n var c1 = chars[selectionStart];\r\n if (c1 !== undefined) {\r\n var cx = c1.x,\r\n cy = c1.y,\r\n w = 0,\r\n h = textHeight,\r\n cl = c1.lineIndex;\r\n\r\n self.selection.clear();\r\n for (var i = selectionStart; i <= selectionEnd; i++) {\r\n var c = chars[i];\r\n if (c.lineIndex != cl) {\r\n drawSelectionRect(cx, cy, w, h);\r\n cx = c.x;\r\n cy = c.y;\r\n cl = c.lineIndex;\r\n w = 0;\r\n }\r\n w += c.width;\r\n }\r\n drawSelectionRect(cx, cy, w, h);\r\n innerContainer.addChildAt(self.selection, 0);\r\n }\r\n };\r\n\r\n this.selectRange = function (startIndex, endIndex) {\r\n if (startIndex > -1 && endIndex > -1) {\r\n var start = Math.min(startIndex, endIndex, chars.length - 1);\r\n var end = Math.min(Math.max(startIndex, endIndex), chars.length - 1);\r\n if (start != selectionStart || end != selectionEnd) {\r\n hasSelection = true;\r\n this.selection.visible = true;\r\n selectionStart = start;\r\n selectionEnd = end;\r\n hideCaret();\r\n updateSelectionGraphics();\r\n updateSelectionColors();\r\n }\r\n this.focus();\r\n }\r\n else {\r\n self.clearSelection();\r\n }\r\n };\r\n\r\n this.clearSelection = function () {\r\n if (hasSelection) {\r\n //remove color\r\n hasSelection = false;\r\n this.selection.visible = false;\r\n selectionStart = -1;\r\n selectionEnd = -1;\r\n updateSelectionColors();\r\n }\r\n };\r\n}\r\n\r\nTextInput.prototype = Object.create(InputBase.prototype);\r\nTextInput.prototype.constructor = TextInput;\r\nmodule.exports = TextInput;\r\n\r\nObject.defineProperties(TextInput.prototype, {\r\n value: {\r\n get: function () {\r\n return this._value;\r\n },\r\n set: function (val) {\r\n if (this.maxLength)\r\n val = val.slice(0, this.maxLength);\r\n\r\n if (this._value != val) {\r\n this._lastValue = this._value;\r\n this._value = val;\r\n this._dirtyText = true;\r\n this.update();\r\n this.emit(\"change\");\r\n\r\n }\r\n }\r\n },\r\n text: {\r\n get: function () {\r\n return this.value;\r\n },\r\n set: function (val) {\r\n this.value = val;\r\n }\r\n }\r\n});\r\n\r\n\r\n/*\r\n * Features:\r\n * multiLine, shift selection, Mouse Selection, Cut, Copy, Paste, Delete, Backspace, Arrow navigation, tabIndex\r\n * \r\n * Methods:\r\n * blur()\r\n * focus()\r\n * select() - selects all text\r\n * selectRange(startIndex, endIndex)\r\n * clearSelection() \r\n * setCaretIndex(index) moves caret to index\r\n * \r\n * \r\n * Events:\r\n * \"change\"\r\n * \"blur\"\r\n * \"blur\"\r\n * \"focus\"\r\n * \"focusChanged\" param: [bool]focus\r\n * \r\n * \r\n */","var Tween = require('./Tween');\r\n\r\nfunction Ticker(autoStart) {\r\n PIXI.utils.EventEmitter.call(this);\r\n this._disabled = true;\r\n this._now = 0;\r\n\r\n this.DeltaTime = 0;\r\n this.Time = performance.now();\r\n this.Ms = 0;\r\n if (autoStart) {\r\n this.disabled = false;\r\n }\r\n Ticker.shared = this;\r\n}\r\n\r\nTicker.prototype = Object.create(PIXI.utils.EventEmitter.prototype);\r\nTicker.prototype.constructor = Ticker;\r\n\r\nmodule.exports = Ticker;\r\n\r\n\r\n\r\nObject.defineProperties(Ticker.prototype, {\r\n disabled: {\r\n get: function () {\r\n return this._disabled;\r\n },\r\n set: function (val) {\r\n if (!this._disabled) {\r\n this._disabled = true;\r\n }\r\n else {\r\n this._disabled = false;\r\n Ticker.shared = this;\r\n this.update(performance.now(), true);\r\n }\r\n }\r\n },\r\n});\r\n\r\n\r\n\r\n/**\r\n * Updates the text\r\n *\r\n * @private\r\n */\r\nTicker.prototype.update = function (time) {\r\n Ticker.shared._now = time;\r\n Ticker.shared.Ms = Ticker.shared._now - Ticker.shared.Time;\r\n Ticker.shared.Time = Ticker.shared._now;\r\n Ticker.shared.DeltaTime = Ticker.shared.Ms * 0.001;\r\n Ticker.shared.emit(\"update\", Ticker.shared.DeltaTime);\r\n Tween._update(Ticker.shared.DeltaTime);\r\n if (!Ticker.shared._disabled)\r\n requestAnimationFrame(Ticker.shared.update);\r\n};\r\n\r\n\r\n\r\n\r\nTicker.on = function (event, fn, context) {\r\n Ticker.prototype.on.apply(this.shared, arguments);\r\n};\r\n\r\nTicker.once = function (event, fn, context) {\r\n Ticker.prototype.once.apply(this.shared, arguments);\r\n};\r\n\r\nTicker.removeListener = function (event, fn) {\r\n Ticker.prototype.removeListener.apply(this.shared, arguments);\r\n};\r\n\r\n\r\nTicker.shared = new Ticker(true);","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * An UI sprite object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param Texture {PIXI.Texture} The texture for the sprite\r\n * @param [Width=Texture.width] {number} Width of tilingsprite\r\n * @param [Height=Texture.height] {number} Height of tiling sprite\r\n */\r\nfunction TilingSprite(t, width, height) {\r\n this.sprite = new PIXI.extras.TilingSprite(t);\r\n UIBase.call(this, width || this.sprite.width, height || this.sprite.height);\r\n this.container.addChild(this.sprite);\r\n}\r\n\r\nTilingSprite.prototype = Object.create(UIBase.prototype);\r\nTilingSprite.prototype.constructor = TilingSprite;\r\nmodule.exports = TilingSprite;\r\n\r\n/**\r\n * Updates the text\r\n *\r\n * @private\r\n */\r\nTilingSprite.prototype.update = function () {\r\n if (this.tint !== null)\r\n this.sprite.tint = this.tint;\r\n\r\n if (this.blendMode !== null)\r\n this.sprite.blendMode = this.blendMode;\r\n\r\n this.sprite.width = this._width;\r\n this.sprite.height = this._height;\r\n};\r\n\r\nObject.defineProperties(TilingSprite.prototype, {\r\n tilePosition: {\r\n get: function () {\r\n return this.sprite.tilePosition;\r\n },\r\n set: function (val) {\r\n this.sprite.tilePosition = val;\r\n }\r\n },\r\n tileScale: {\r\n get: function () {\r\n return this.sprite.tileScale;\r\n },\r\n set: function (val) {\r\n this.sprite.tileScale = val;\r\n }\r\n }\r\n});","var MathHelper = require('./MathHelper');\r\nvar Ease = require('./Ease/Ease');\r\nvar _tweenItemCache = [];\r\nvar _callbackItemCache = [];\r\nvar _tweenObjects = {};\r\nvar _activeTweenObjects = {};\r\nvar _currentId = 0;\r\n\r\nvar TweenObject = function (object) {\r\n this.object = object;\r\n this.tweens = {};\r\n this.active = false;\r\n};\r\n\r\nvar CallbackItem = function () {\r\n this._ready = false;\r\n this.obj = null;\r\n this.parent = null;\r\n this.key = \"\";\r\n this.time = 0;\r\n this.callback = null;\r\n this.currentTime = 0;\r\n};\r\n\r\nCallbackItem.prototype.set = function (obj, callback, time) {\r\n\r\n\r\n this.obj = obj.object;\r\n\r\n if (!this.obj._currentCallbackID)\r\n this.obj._currentCallbackID = 1;\r\n else\r\n this.obj._currentCallbackID++;\r\n\r\n this.time = time;\r\n this.parent = obj;\r\n this.callback = callback;\r\n this._ready = false;\r\n this.key = \"cb_\" + this.obj._currentCallbackID;\r\n this.currentTime = 0;\r\n if (!this.parent.active) {\r\n this.parent.active = true;\r\n _activeTweenObjects[this.obj._tweenObjectId] = this.parent;\r\n }\r\n};\r\n\r\nCallbackItem.prototype.update = function (delta) {\r\n this.currentTime += delta;\r\n if (this.currentTime >= this.time) {\r\n this._ready = true;\r\n delete this.parent.tweens[this.key];\r\n if (!Object.keys(this.parent.tweens).length) {\r\n this.parent.active = false;\r\n delete _activeTweenObjects[this.obj._tweenObjectId];\r\n }\r\n this.callback();\r\n }\r\n};\r\n\r\nvar TweenItem = function () {\r\n this._ready = false;\r\n this.parent = null;\r\n this.obj = null;\r\n this.key = \"\";\r\n this.from = 0;\r\n this.to = 0;\r\n this.time = 0;\r\n this.ease = 0;\r\n this.currentTime = 0;\r\n this.t = 0;\r\n};\r\n\r\n\r\nTweenItem.prototype.set = function (obj, key, from, to, time, ease) {\r\n this.parent = obj;\r\n this.obj = obj.object;\r\n this.key = key;\r\n this.surfix = getSurfix(to);\r\n this.to = getToValue(to);\r\n this.from = getFromValue(from, to, this.obj, key);\r\n this.time = time;\r\n this.currentTime = 0;\r\n this.ease = ease;\r\n this._ready = false;\r\n\r\n if (!this.parent.active) {\r\n this.parent.active = true;\r\n _activeTweenObjects[this.obj._tweenObjectId] = this.parent;\r\n }\r\n\r\n};\r\n\r\nTweenItem.prototype.update = function (delta) {\r\n this.currentTime += delta;\r\n this.t = Math.min(this.currentTime, this.time) / this.time;\r\n if (this.ease)\r\n this.t = this.ease.getPosition(this.t);\r\n\r\n var val = MathHelper.Lerp(this.from, this.to, this.t);\r\n this.obj[this.key] = this.surfix ? val + this.surfix : val;\r\n\r\n if (this.currentTime >= this.time) {\r\n this._ready = true;\r\n delete this.parent.tweens[this.key];\r\n if (!Object.keys(this.parent.tweens).length) {\r\n this.parent.active = false;\r\n delete _activeTweenObjects[this.obj._tweenObjectId];\r\n }\r\n }\r\n};\r\n\r\n\r\n\r\nvar widthKeys = [\"width\", \"minWidth\", \"maxWidth\", \"anchorLeft\", \"anchorRight\", \"left\", \"right\", \"x\"];\r\nvar heightKeys = [\"height\", \"minHeight\", \"maxHeight\", \"anchorTop\", \"anchorBottom\", \"top\", \"bottom\", \"y\"];\r\n\r\n\r\nfunction getFromValue(from, to, obj, key) {\r\n //both number\r\n if (!isNaN(from) && !isNaN(to))\r\n return from;\r\n\r\n //both percentage\r\n if (isNaN(from) && isNaN(to) && from.indexOf('%') !== -1 && to.indexOf('%') !== -1)\r\n return parseFloat(from.replace('%', ''));\r\n\r\n //convert from to px\r\n if (isNaN(from) && !isNaN(to) && from.indexOf('%') !== -1) {\r\n if (widthKeys.indexOf(key) !== -1)\r\n return obj.parent._width * (parseFloat(from.replace('%', '')) * 0.01);\r\n else if (heightKeys.indexOf(key) !== -1)\r\n return obj.parent._height * (parseFloat(from.replace('%', '')) * 0.01);\r\n else\r\n return 0;\r\n }\r\n\r\n //convert from to percentage\r\n if (!isNaN(from) && isNaN(to) && to.indexOf('%') !== -1) {\r\n if (widthKeys.indexOf(key) !== -1)\r\n return from / obj.parent._width * 100;\r\n else if (heightKeys.indexOf(key) !== -1)\r\n return from / obj.parent._height * 100;\r\n else\r\n return 0;\r\n }\r\n return 0;\r\n}\r\n\r\nfunction getSurfix(to) {\r\n if (isNaN(to) && to.indexOf('%') !== -1)\r\n return \"%\";\r\n}\r\n\r\nfunction getToValue(to) {\r\n if (!isNaN(to))\r\n return to;\r\n if (isNaN(to) && to.indexOf('%') !== -1)\r\n return parseFloat(to.replace('%', ''));\r\n}\r\n\r\n\r\nfunction getObject(obj) {\r\n if (!obj._tweenObjectId) {\r\n obj._tweenObjectId = _currentId;\r\n _currentId++;\r\n }\r\n var object = _tweenObjects[obj._tweenObjectId];\r\n if (!object) {\r\n object = _tweenObjects[obj._tweenObjectId] = new TweenObject(obj);\r\n }\r\n return object;\r\n}\r\n\r\nfunction getTweenItem() {\r\n for (var i = 0; i < _tweenItemCache.length; i++) {\r\n if (_tweenItemCache[i]._ready)\r\n return _tweenItemCache[i];\r\n }\r\n\r\n var tween = new TweenItem();\r\n _tweenItemCache.push(tween);\r\n return tween;\r\n}\r\n\r\nfunction getCallbackItem() {\r\n for (var i = 0; i < _callbackItemCache.length; i++) {\r\n if (_callbackItemCache[i]._ready)\r\n return _callbackItemCache[i];\r\n }\r\n\r\n var cb = new CallbackItem();\r\n _callbackItemCache.push(cb);\r\n return cb;\r\n}\r\n\r\nvar Tween = {\r\n to: function (obj, time, params, ease) {\r\n var object = getObject(obj);\r\n for (var key in params) {\r\n if (key === \"onComplete\") {\r\n var cb = getCallbackItem();\r\n cb.set(object, params[key], time);\r\n object.tweens[cb.key] = cb;\r\n continue;\r\n }\r\n\r\n if (time) {\r\n if (params[key] == obj[key] || typeof obj[key] === \"undefined\") continue;\r\n if (!object.tweens[key])\r\n object.tweens[key] = getTweenItem();\r\n object.tweens[key].set(object, key, obj[key], params[key], time, ease);\r\n }\r\n }\r\n if (!time) this.set(obj, params);\r\n },\r\n from: function (obj, time, params, ease) {\r\n var object = getObject(obj);\r\n for (var key in params) {\r\n if (key === \"onComplete\") {\r\n var cb = getCallbackItem();\r\n cb.set(object, params[key], time);\r\n object.tweens[cb.key] = cb;\r\n continue;\r\n }\r\n\r\n if (time) {\r\n if (params[key] == obj[key] || typeof obj[key] === \"undefined\") continue;\r\n if (!object.tweens[key])\r\n object.tweens[key] = getTweenItem();\r\n object.tweens[key].set(object, key, params[key], obj[key], time, ease);\r\n }\r\n }\r\n if (!time) this.set(obj, params);\r\n },\r\n fromTo: function (obj, time, paramsFrom, paramsTo, ease) {\r\n var object = getObject(obj);\r\n for (var key in paramsTo) {\r\n if (key === \"onComplete\") {\r\n var cb = getCallbackItem();\r\n cb.set(object, paramsTo[key], time);\r\n object.tweens[cb.key] = cb;\r\n continue;\r\n }\r\n if (time) {\r\n if (paramsFrom[key] == paramsTo[key] || typeof obj[key] === \"undefined\" || typeof paramsFrom[key] === \"undefined\") continue;\r\n if (!object.tweens[key]) {\r\n object.tweens[key] = getTweenItem();\r\n }\r\n object.tweens[key].set(object, key, paramsFrom[key], paramsTo[key], time, ease);\r\n }\r\n }\r\n if (!time) this.set(obj, paramsTo);\r\n },\r\n set: function (obj, params) {\r\n var object = getObject(obj);\r\n for (var key in params) {\r\n if (params[key] == obj[key] || typeof obj[key] === \"undefined\") continue;\r\n if (object.tweens[key]) delete object.tweens[key];\r\n obj[key] = params[key];\r\n }\r\n },\r\n _update: function (delta) {\r\n for (var id in _activeTweenObjects) {\r\n var object = _activeTweenObjects[id];\r\n for (var key in object.tweens) {\r\n object.tweens[key].update(delta);\r\n }\r\n }\r\n }\r\n};\r\n\r\n\r\nmodule.exports = Tween;","var UI = {\r\n Stage: require('./Stage'),\r\n Container: require('./Container'),\r\n ScrollingContainer: require('./ScrollingContainer'),\r\n SortableList: require('./SortableList'),\r\n Sprite: require('./Sprite'),\r\n TilingSprite: require('./TilingSprite'),\r\n SliceSprite: require('./SliceSprite'),\r\n Slider: require('./Slider'),\r\n ScrollBar: require('./ScrollBar'),\r\n Text: require('./Text'),\r\n DynamicText: require('./DynamicText/DynamicText'),\r\n DynamicTextStyle: require('./DynamicText/DynamicTextStyle'),\r\n TextInput: require('./TextInput'),\r\n Button: require('./Button'),\r\n CheckBox: require('./CheckBox'),\r\n MathHelper: require('./MathHelper'),\r\n Tween: require('./Tween'),\r\n Ease: require('./Ease/Ease'),\r\n Interaction: require('./Interaction/Interaction'),\r\n Ticker: require('./Ticker').shared,\r\n};\r\n\r\n\r\nmodule.exports = UI;","var UISettings = require('./UISettings'),\r\n UI = require('./UI'),\r\n DragEvent = require('./Interaction/DragEvent'),\r\n DragDropController = require('./Interaction/DragDropController');\r\n\r\n/**\r\n * Base class of all UIObjects\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @param width {Number} Width of the UIObject\r\n * @param height {Number} Height of the UIObject\r\n */\r\nfunction UIBase(width, height) {\r\n PIXI.utils.EventEmitter.call(this);\r\n this.container = new PIXI.Container();\r\n this.setting = new UISettings();\r\n this.children = [];\r\n this.parent = null;\r\n this.stage = null;\r\n this.initialized = false;\r\n this.dragInitialized = false;\r\n this.dropInitialized = false;\r\n this.dirty = true;\r\n this._oldWidth = -1;\r\n this._oldHeight = -1;\r\n this.pixelPerfect = true;\r\n\r\n\r\n if (width && isNaN(width) && width.indexOf('%') != -1) {\r\n this.setting.widthPct = parseFloat(width.replace('%', '')) * 0.01;\r\n }\r\n else {\r\n this.setting.widthPct = null;\r\n }\r\n\r\n if (height && isNaN(height) && height.indexOf('%') != -1)\r\n this.setting.heightPct = parseFloat(height.replace('%', '')) * 0.01;\r\n else {\r\n this.setting.heightPct = null;\r\n }\r\n\r\n this.setting.width = width || 0;\r\n this.setting.height = height || 0;\r\n\r\n //actual values\r\n this._width = 0;\r\n this._height = 0;\r\n this._minWidth = null;\r\n this._minHeight = null;\r\n this._maxWidth = null;\r\n this._maxHeight = null;\r\n this._anchorLeft = null;\r\n this._anchorRight = null;\r\n this._anchorTop = null;\r\n this._anchorBottom = null;\r\n this._left = null;\r\n this._right = null;\r\n this._top = null;\r\n this._bottom = null;\r\n\r\n this._dragPosition = null; //used for overriding positions if tweens is playing\r\n}\r\n\r\nUIBase.prototype = Object.create(PIXI.utils.EventEmitter.prototype);\r\nUIBase.prototype.constructor = UIBase;\r\nmodule.exports = UIBase;\r\n\r\n/**\r\n * Renders the object using the WebGL renderer\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.updatesettings = function (updateChildren, updateParent) {\r\n\r\n if (!this.initialized) {\r\n if (this.parent !== null && this.parent.stage !== null && this.parent.initialized) {\r\n this.initialize();\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n\r\n if (updateParent)\r\n this.updateParent();\r\n\r\n this.baseupdate();\r\n this.update();\r\n\r\n if (updateChildren)\r\n this.updateChildren();\r\n\r\n\r\n\r\n\r\n};\r\n\r\n/**\r\n * Update method (override from other UIObjects)\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.update = function () {\r\n};\r\n\r\n\r\n/**\r\n * Updates the parent\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.updateParent = function () {\r\n if (this.parent !== null) {\r\n if (this.parent.updatesettings) {\r\n this.parent.updatesettings(false, true);\r\n }\r\n }\r\n};\r\n\r\n\r\n/**\r\n * Updates the UIObject with all base settings\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.baseupdate = function () {\r\n //return if parent size didnt change\r\n if (this.parent !== null) {\r\n var parentHeight, parentWidth;\r\n\r\n\r\n\r\n //transform convertion (% etc)\r\n this.dirty = true; \r\n this._width = this.actual_width;\r\n this._height = this.actual_height;\r\n this._minWidth = this.actual_minWidth;\r\n this._minHeight = this.actual_minHeight;\r\n this._maxWidth = this.actual_maxWidth;\r\n this._maxHeight = this.actual_maxHeight;\r\n this._anchorLeft = this.actual_anchorLeft;\r\n this._anchorRight = this.actual_anchorRight;\r\n this._anchorTop = this.actual_anchorTop;\r\n this._anchorBottom = this.actual_anchorBottom;\r\n this._left = this.actual_left;\r\n this._right = this.actual_right;\r\n this._top = this.actual_top;\r\n this._bottom = this.actual_bottom;\r\n this._parentWidth = parentWidth = this.parent._width;\r\n this._parentHeight = parentHeight = this.parent._height;\r\n this.dirty = false;\r\n\r\n\r\n var pivotXOffset = this.pivotX * this._width;\r\n var pivotYOffset = this.pivotY * this._height;\r\n\r\n if (this.pixelPerfect) {\r\n pivotXOffset = Math.round(pivotXOffset);\r\n pivotYOffset = Math.round(pivotYOffset);\r\n }\r\n\r\n\r\n if (this.horizontalAlign === null) {\r\n //get anchors (use left right if conflict)\r\n if (this._anchorLeft !== null && this._anchorRight === null && this._right !== null)\r\n this._anchorRight = this._right;\r\n else if (this._anchorLeft === null && this._anchorRight !== null && this._left !== null)\r\n this._anchorLeft = this._left;\r\n else if (this._anchorLeft === null && this._anchorRight === null && this._left !== null && this._right !== null) {\r\n this._anchorLeft = this._left;\r\n this._anchorRight = this._right;\r\n }\r\n\r\n\r\n var useHorizontalAnchor = this._anchorLeft !== null || this._anchorRight !== null;\r\n var useLeftRight = !useHorizontalAnchor && (this._left !== null || this._right !== null);\r\n\r\n if (useLeftRight) {\r\n if (this._left !== null)\r\n this.container.position.x = this._left;\r\n else if (this._right !== null)\r\n this.container.position.x = parentWidth - this._right;\r\n }\r\n else if (useHorizontalAnchor) {\r\n\r\n if (this._anchorLeft !== null && this._anchorRight === null)\r\n this.container.position.x = this._anchorLeft;\r\n else if (this._anchorLeft === null && this._anchorRight !== null)\r\n this.container.position.x = parentWidth - this._width - this._anchorRight;\r\n else if (this._anchorLeft !== null && this._anchorRight !== null) {\r\n this.container.position.x = this._anchorLeft;\r\n this._width = parentWidth - this._anchorLeft - this._anchorRight;\r\n }\r\n this.container.position.x += pivotXOffset;\r\n }\r\n else {\r\n this.container.position.x = 0;\r\n }\r\n }\r\n\r\n\r\n\r\n if (this.verticalAlign === null) {\r\n //get anchors (use top bottom if conflict)\r\n if (this._anchorTop !== null && this._anchorBottom === null && this._bottom !== null)\r\n this._anchorBottom = this._bottom;\r\n if (this._anchorTop === null && this._anchorBottom !== null && this._top !== null)\r\n this._anchorTop = this._top;\r\n\r\n var useVerticalAnchor = this._anchorTop !== null || this._anchorBottom !== null;\r\n var useTopBottom = !useVerticalAnchor && (this._top !== null || this._bottom !== null);\r\n\r\n if (useTopBottom) {\r\n if (this._top !== null)\r\n this.container.position.y = this._top;\r\n else if (this._bottom !== null)\r\n this.container.position.y = parentHeight - this._bottom;\r\n }\r\n else if (useVerticalAnchor) {\r\n if (this._anchorTop !== null && this._anchorBottom === null)\r\n this.container.position.y = this._anchorTop;\r\n else if (this._anchorTop === null && this._anchorBottom !== null)\r\n this.container.position.y = parentHeight - this._height - this._anchorBottom;\r\n else if (this._anchorTop !== null && this._anchorBottom !== null) {\r\n this.container.position.y = this._anchorTop;\r\n this._height = parentHeight - this._anchorTop - this._anchorBottom;\r\n }\r\n this.container.position.y += pivotYOffset;\r\n }\r\n else {\r\n this.container.position.y = 0;\r\n }\r\n }\r\n\r\n //min/max sizes\r\n if (this._maxWidth !== null && this._width > this._maxWidth) this._width = this._maxWidth;\r\n if (this._width < this._minWidth) this._width = this._minWidth;\r\n\r\n if (this._maxHeight !== null && this._height > this._maxHeight) this._height = this._maxHeight;\r\n if (this._height < this._minHeight) this._height = this._minHeight;\r\n\r\n\r\n //pure vertical/horizontal align\r\n if (this.horizontalAlign !== null) {\r\n if (this.horizontalAlign == \"center\")\r\n this.container.position.x = parentWidth * 0.5 - this._width * 0.5;\r\n else if (this.horizontalAlign == \"right\")\r\n this.container.position.x = parentWidth - this._width;\r\n else\r\n this.container.position.x = 0;\r\n this.container.position.x += pivotXOffset;\r\n }\r\n if (this.verticalAlign !== null) {\r\n if (this.verticalAlign == \"middle\")\r\n this.container.position.y = parentHeight * 0.5 - this._height * 0.5;\r\n else if (this.verticalAlign == \"bottom\")\r\n this.container.position.y = parentHeight - this._height;\r\n else\r\n this.container.position.y = 0;\r\n this.container.position.y += pivotYOffset;\r\n }\r\n\r\n\r\n //Unrestricted dragging\r\n if (this.dragging && !this.setting.dragRestricted) {\r\n this.container.position.x = this._dragPosition.x;\r\n this.container.position.y = this._dragPosition.y;\r\n }\r\n\r\n\r\n //scale\r\n if (this.setting.scaleX !== null) this.container.scale.x = this.setting.scaleX;\r\n if (this.setting.scaleY !== null) this.container.scale.y = this.setting.scaleY;\r\n\r\n //pivot\r\n if (this.setting.pivotX !== null) this.container.pivot.x = pivotXOffset;\r\n if (this.setting.pivotY !== null) this.container.pivot.y = pivotYOffset;\r\n\r\n if (this.setting.alpha !== null) this.container.alpha = this.setting.alpha;\r\n if (this.setting.rotation !== null) this.container.rotation = this.setting.rotation;\r\n\r\n //make pixel perfect\r\n if (this.pixelPerfect) {\r\n this._width = Math.round(this._width);\r\n this._height = Math.round(this._height);\r\n this.container.position.x = Math.round(this.container.position.x);\r\n this.container.position.y = Math.round(this.container.position.y);\r\n }\r\n\r\n\r\n\r\n }\r\n};\r\n\r\n\r\n/**\r\n * Updates all UI Children\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.updateChildren = function () {\r\n for (var i = 0; i < this.children.length; i++) {\r\n this.children[i].updatesettings(true);\r\n }\r\n};\r\n\r\nUIBase.prototype.addChild = function (UIObject) {\r\n var argumentsLength = arguments.length;\r\n if (argumentsLength > 1) {\r\n for (var i = 0; i < argumentsLength; i++) {\r\n this.addChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n if (UIObject.parent) {\r\n UIObject.parent.removeChild(UIObject);\r\n }\r\n\r\n UIObject.parent = this;\r\n this.container.addChild(UIObject.container);\r\n this.children.push(UIObject);\r\n this.updatesettings(true, true);\r\n }\r\n\r\n return UIObject;\r\n};\r\n\r\nUIBase.prototype.removeChild = function (UIObject) {\r\n var argumentLenght = arguments.length;\r\n if (argumentLenght > 1) {\r\n for (var i = 0; i < argumentLenght; i++) {\r\n this.removeChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n var index = this.children.indexOf(UIObject);\r\n if (index !== -1) {\r\n var oldUIParent = UIObject.parent;\r\n var oldParent = UIObject.container.parent;\r\n UIObject.container.parent.removeChild(UIObject.container);\r\n this.children.splice(index, 1);\r\n UIObject.parent = null;\r\n\r\n //oldParent._recursivePostUpdateTransform();\r\n setTimeout(function () { //hack but cant get the transforms to update propertly otherwice?\r\n if (oldUIParent.updatesettings)\r\n oldUIParent.updatesettings(true, true);\r\n }, 0);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Initializes the object when its added to an UIStage\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.initialize = function () {\r\n this.initialized = true;\r\n this.stage = this.parent.stage;\r\n if (this.draggable) {\r\n this.initDraggable();\r\n }\r\n\r\n if (this.droppable) {\r\n this.initDroppable();\r\n }\r\n};\r\n\r\nUIBase.prototype.clearDraggable = function () {\r\n if (this.dragInitialized) {\r\n this.dragInitialized = false;\r\n this.drag.stopEvent();\r\n }\r\n};\r\n\r\nUIBase.prototype.initDraggable = function () {\r\n if (!this.dragInitialized) {\r\n this.dragInitialized = true;\r\n var containerStart = new PIXI.Point(),\r\n stageOffset = new PIXI.Point(),\r\n self = this;\r\n\r\n this._dragPosition = new PIXI.Point();\r\n this.drag = new DragEvent(this);\r\n this.drag.onDragStart = function (e) {\r\n var added = DragDropController.add(this, e);\r\n if (!this.dragging && added) {\r\n this.dragging = true;\r\n this.container.interactive = false;\r\n containerStart.copy(this.container.position);\r\n if (this.dragContainer) {\r\n var c = this.dragContainer.container ? this.dragContainer.container : this.dragContainer;\r\n if (c) {\r\n //_this.container._recursivePostUpdateTransform();\r\n stageOffset.set(c.worldTransform.tx - this.parent.container.worldTransform.tx, c.worldTransform.ty - this.parent.container.worldTransform.ty);\r\n c.addChild(this.container);\r\n }\r\n } else {\r\n stageOffset.set(0);\r\n }\r\n\r\n }\r\n };\r\n\r\n\r\n this.drag.onDragMove = function (e, offset) {\r\n if (this.dragging) {\r\n this._dragPosition.set(containerStart.x + offset.x - stageOffset.x, containerStart.y + offset.y - stageOffset.y);\r\n this.x = this._dragPosition.x;\r\n this.y = this._dragPosition.y;\r\n }\r\n };\r\n\r\n this.drag.onDragEnd = function (e) {\r\n if (this.dragging) {\r\n this.dragging = false;\r\n //Return to container after 1ms if not picked up by a droppable\r\n setTimeout(function () {\r\n self.container.interactive = true;\r\n var item = DragDropController.getItem(self);\r\n if (item) {\r\n var container = self.parent === self.stage ? self.stage : self.parent.container;\r\n container.toLocal(self.container.position, self.container.parent, self);\r\n if (container != self.container) {\r\n self.parent.addChild(self);\r\n }\r\n }\r\n }, 1);\r\n }\r\n\r\n };\r\n }\r\n};\r\n\r\nUIBase.prototype.clearDroppable = function () {\r\n if (this.dropInitialized) {\r\n this.dropInitialized = false;\r\n this.container.removeListener('mouseup', this.onDrop);\r\n this.container.removeListener('touchend', this.onDrop);\r\n }\r\n};\r\n\r\nUIBase.prototype.initDroppable = function () {\r\n if (!this.dropInitialized) {\r\n this.dropInitialized = true;\r\n var container = this.container,\r\n self = this;\r\n\r\n this.container.interactive = true;\r\n this.onDrop = function (event) {\r\n var item = DragDropController.getEventItem(event, self.dropGroup);\r\n if (item && item.dragging) {\r\n item.dragging = false;\r\n item.container.interactive = true;\r\n var parent = self.droppableReparent !== null ? self.droppableReparent : self;\r\n parent.container.toLocal(item.container.position, item.container.parent, item);\r\n if (parent.container != item.container.parent)\r\n parent.addChild(item);\r\n }\r\n };\r\n\r\n container.on('mouseup', this.onDrop);\r\n container.on('touchend', this.onDrop);\r\n }\r\n};\r\n\r\nObject.defineProperties(UIBase.prototype, {\r\n x: {\r\n get: function () {\r\n return this.setting.left;\r\n },\r\n set: function (val) {\r\n this.left = val;\r\n }\r\n },\r\n y: {\r\n get: function () {\r\n return this.setting.top;\r\n },\r\n set: function (val) {\r\n this.top = val;\r\n }\r\n },\r\n width: {\r\n get: function () {\r\n return this.setting.width;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.widthPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.widthPct = null;\r\n \r\n this.setting.width = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_width: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.widthPct !== null) {\r\n this._width = this.parent._width * this.setting.widthPct;\r\n }\r\n else {\r\n this._width = this.setting.width;\r\n }\r\n }\r\n return this._width;\r\n }\r\n },\r\n height: {\r\n get: function () {\r\n return this.setting.height;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.heightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.heightPct = null;\r\n \r\n this.setting.height = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_height: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.heightPct !== null) {\r\n this._height = this.parent._height * this.setting.heightPct;\r\n }\r\n else {\r\n this._height = this.setting.height;\r\n }\r\n }\r\n return this._height;\r\n }\r\n },\r\n minWidth: {\r\n get: function () {\r\n return this.setting.minWidth;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.minWidthPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.minWidthPct = null;\r\n \r\n this.setting.minWidth = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_minWidth: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.minWidthPct !== null) {\r\n this._minWidth = this.parent._width * this.setting.minWidthPct;\r\n }\r\n else {\r\n this._minWidth = this.setting.minWidth;\r\n }\r\n }\r\n return this._minWidth;\r\n }\r\n },\r\n minHeight: {\r\n get: function () {\r\n return this.setting.minHeight;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.minHeightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.minHeightPct = null;\r\n \r\n this.setting.minHeight = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_minHeight: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.minHeightPct !== null) {\r\n this._minHeight = this.parent._height * this.setting.minHeightPct;\r\n }\r\n else {\r\n this._minHeight = this.setting.minHeight;\r\n }\r\n }\r\n return this._minHeight;\r\n }\r\n },\r\n maxWidth: {\r\n get: function () {\r\n return this.setting.maxWidth;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.maxWidthPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.maxWidthPct = null;\r\n \r\n\r\n this.setting.maxWidth = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_maxWidth: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.maxWidthPct !== null) {\r\n this._maxWidth = this.parent._width * this.setting.maxWidthPct;\r\n }\r\n else {\r\n this._maxWidth = this.setting.maxWidth;\r\n }\r\n }\r\n return this._maxWidth;\r\n }\r\n },\r\n maxHeight: {\r\n get: function () {\r\n return this.setting.maxHeight;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.maxHeightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.maxHeightPct = null;\r\n \r\n this.setting.maxHeight = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_maxHeight: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.maxHeightPct !== null) {\r\n this._maxHeight = this.parent._height * this.setting.maxHeightPct;\r\n }\r\n else {\r\n this._maxHeight = this.setting.maxHeight;\r\n }\r\n }\r\n return this._maxHeight;\r\n }\r\n },\r\n anchorLeft: {\r\n get: function () {\r\n return this.setting.anchorLeft;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1) \r\n this.setting.anchorLeftPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else \r\n this.setting.anchorLeftPct = null;\r\n \r\n this.setting.anchorLeft = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorLeft: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorLeftPct !== null) {\r\n this._anchorLeft = this.parent._width * this.setting.anchorLeftPct;\r\n }\r\n else {\r\n this._anchorLeft = this.setting.anchorLeft;\r\n }\r\n }\r\n return this._anchorLeft;\r\n }\r\n },\r\n anchorRight: {\r\n get: function () {\r\n return this.setting.anchorRight;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.anchorRightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.anchorRightPct = null;\r\n \r\n this.setting.anchorRight = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorRight: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorRightPct !== null) {\r\n this._anchorRight = this.parent._width * this.setting.anchorRightPct;\r\n }\r\n else {\r\n this._anchorRight = this.setting.anchorRight;\r\n }\r\n }\r\n return this._anchorRight;\r\n }\r\n },\r\n anchorTop: {\r\n get: function () {\r\n return this.setting.anchorTop;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.anchorTopPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.anchorTopPct = null;\r\n \r\n this.setting.anchorTop = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorTop: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorTopPct !== null) {\r\n this._anchorTop = this.parent._height * this.setting.anchorTopPct;\r\n }\r\n else {\r\n this._anchorTop = this.setting.anchorTop;\r\n }\r\n }\r\n return this._anchorTop;\r\n }\r\n },\r\n anchorBottom: {\r\n get: function () {\r\n return this.setting.anchorBottom;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.anchorBottomPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else \r\n this.setting.anchorBottomPct = null;\r\n \r\n this.setting.anchorBottom = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorBottom: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorBottomPct !== null) {\r\n this._anchorBottom = this.parent._height * this.setting.anchorBottomPct;\r\n }\r\n else {\r\n this._anchorBottom = this.setting.anchorBottom;\r\n }\r\n }\r\n return this._anchorBottom;\r\n }\r\n },\r\n left: {\r\n get: function () {\r\n return this.setting.left;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.leftPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.leftPct = null;\r\n \r\n this.setting.left = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_left: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.leftPct !== null) {\r\n this._left = this.parent._width * this.setting.leftPct;\r\n }\r\n else {\r\n this._left = this.setting.left;\r\n }\r\n }\r\n return this._left;\r\n }\r\n },\r\n right: {\r\n get: function () {\r\n return this.setting.right;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.rightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.rightPct = null;\r\n\r\n this.setting.right = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_right: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.rightPct !== null) {\r\n this._right = this.parent._width * this.setting.rightPct;\r\n }\r\n else {\r\n this._right = this.setting.right;\r\n }\r\n }\r\n return this._right;\r\n }\r\n },\r\n top: {\r\n get: function () {\r\n return this.setting.top;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.topPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.topPct = null;\r\n\r\n this.setting.top = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_top: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.topPct !== null) {\r\n this._top = this.parent._height * this.setting.topPct;\r\n }\r\n else {\r\n this._top = this.setting.top;\r\n }\r\n }\r\n return this._top;\r\n }\r\n },\r\n bottom: {\r\n get: function () {\r\n return this.setting.bottom;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.bottomPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.bottomPct = null;\r\n\r\n this.setting.bottom = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_bottom: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.bottomPct !== null) {\r\n this._bottom = this.parent._height * this.setting.bottomPct;\r\n }\r\n else {\r\n this._bottom = this.setting.bottom;\r\n }\r\n }\r\n return this._bottom;\r\n }\r\n },\r\n verticalAlign: {\r\n get: function () {\r\n return this.setting.verticalAlign;\r\n },\r\n set: function (val) {\r\n this.setting.verticalAlign = val;\r\n this.baseupdate();\r\n }\r\n },\r\n horizontalAlign: {\r\n get: function () {\r\n return this.setting.horizontalAlign;\r\n },\r\n set: function (val) {\r\n this.setting.horizontalAlign = val;\r\n this.baseupdate();\r\n }\r\n },\r\n tint: {\r\n get: function () {\r\n return this.setting.tint;\r\n },\r\n set: function (val) {\r\n this.setting.tint = val;\r\n this.update();\r\n }\r\n },\r\n alpha: {\r\n get: function () {\r\n return this.setting.alpha;\r\n },\r\n set: function (val) {\r\n this.setting.alpha = val;\r\n this.container.alpha = val;\r\n }\r\n },\r\n rotation: {\r\n get: function () {\r\n return this.setting.rotation;\r\n },\r\n set: function (val) {\r\n this.setting.rotation = val;\r\n this.container.rotation = val;\r\n }\r\n },\r\n blendMode: {\r\n get: function () {\r\n return this.setting.blendMode;\r\n },\r\n set: function (val) {\r\n this.setting.blendMode = val;\r\n this.update();\r\n }\r\n },\r\n pivotX: {\r\n get: function () {\r\n return this.setting.pivotX;\r\n },\r\n set: function (val) {\r\n this.setting.pivotX = val;\r\n this.baseupdate();\r\n this.update();\r\n }\r\n },\r\n pivotY: {\r\n get: function () {\r\n return this.setting.pivotY;\r\n },\r\n set: function (val) {\r\n this.setting.pivotY = val;\r\n this.baseupdate();\r\n this.update();\r\n }\r\n },\r\n pivot: {\r\n set: function (val) {\r\n this.setting.pivotX = val;\r\n this.setting.pivotY = val;\r\n this.baseupdate();\r\n this.update();\r\n }\r\n },\r\n scaleX: {\r\n get: function () {\r\n return this.setting.scaleX;\r\n },\r\n set: function (val) {\r\n this.setting.scaleX = val;\r\n this.container.scale.x = val;\r\n }\r\n },\r\n scaleY: {\r\n get: function () {\r\n return this.setting.scaleY;\r\n },\r\n set: function (val) {\r\n this.setting.scaleY = val;\r\n this.container.scale.y = val;\r\n }\r\n },\r\n scale: {\r\n get: function () {\r\n return this.setting.scaleX;\r\n },\r\n set: function (val) {\r\n this.setting.scaleX = val;\r\n this.setting.scaleY = val;\r\n this.container.scale.x = val;\r\n this.container.scale.y = val;\r\n }\r\n },\r\n\r\n draggable: {\r\n get: function () {\r\n return this.setting.draggable;\r\n },\r\n set: function (val) {\r\n this.setting.draggable = val;\r\n if (this.initialized) {\r\n if (val)\r\n this.initDraggable();\r\n else\r\n this.clearDraggable();\r\n }\r\n }\r\n },\r\n dragRestricted: {\r\n get: function () {\r\n return this.setting.dragRestricted;\r\n },\r\n set: function (val) {\r\n this.setting.dragRestricted = val;\r\n }\r\n },\r\n dragRestrictAxis: {\r\n get: function () {\r\n return this.setting.dragRestrictAxis;\r\n },\r\n set: function (val) {\r\n this.setting.dragRestrictAxis = val;\r\n }\r\n },\r\n dragThreshold: {\r\n get: function () {\r\n return this.setting.dragThreshold;\r\n },\r\n set: function (val) {\r\n this.setting.dragThreshold = val;\r\n }\r\n },\r\n dragGroup: {\r\n get: function () {\r\n return this.setting.dragGroup;\r\n },\r\n set: function (val) {\r\n this.setting.dragGroup = val;\r\n }\r\n },\r\n dragContainer: {\r\n get: function () {\r\n return this.setting.dragContainer;\r\n },\r\n set: function (val) {\r\n this.setting.dragContainer = val;\r\n }\r\n },\r\n droppable: {\r\n get: function () {\r\n return this.setting.droppable;\r\n },\r\n set: function (val) {\r\n this.setting.droppable = true;\r\n if (this.initialized) {\r\n if (val)\r\n this.initDroppable();\r\n else\r\n this.clearDroppable();\r\n }\r\n }\r\n },\r\n droppableReparent: {\r\n get: function () {\r\n return this.setting.droppableReparent;\r\n },\r\n set: function (val) {\r\n this.setting.droppableReparent = val;\r\n }\r\n },\r\n dropGroup: {\r\n get: function () {\r\n return this.setting.dropGroup;\r\n },\r\n set: function (val) {\r\n this.setting.dropGroup = val;\r\n }\r\n },\r\n renderable: {\r\n get: function () {\r\n return this.container.renderable;\r\n },\r\n set: function (val) {\r\n this.container.renderable = val;\r\n }\r\n },\r\n visible: {\r\n get: function () {\r\n return this.container.visible;\r\n },\r\n set: function (val) {\r\n this.container.visible = val;\r\n }\r\n },\r\n cacheAsBitmap: {\r\n get: function () {\r\n return this.container.cacheAsBitmap;\r\n },\r\n set: function (val) {\r\n this.container.cacheAsBitmap = val;\r\n }\r\n },\r\n onClick: {\r\n get: function () {\r\n return this.container.click;\r\n },\r\n set: function (val) {\r\n this.container.click = val;\r\n }\r\n },\r\n interactive: {\r\n get: function () {\r\n return this.container.interactive;\r\n },\r\n set: function (val) {\r\n this.container.interactive = val;\r\n }\r\n },\r\n interactiveChildren: {\r\n get: function () {\r\n return this.container.interactiveChildren;\r\n },\r\n set: function (val) {\r\n this.container.interactiveChildren = val;\r\n }\r\n }\r\n});","/**\r\n * Settings object for all UIObjects\r\n *\r\n * @class\r\n * @memberof PIXI.UI\r\n */\r\nfunction UISettings() {\r\n this.width = 0;\r\n this.height = 0;\r\n this.minHeight = 0;\r\n this.maxWidth = null;\r\n this.maxHeight = null;\r\n this.left = null;\r\n this.right = null;\r\n this.top = null;\r\n this.bottom = null;\r\n this.anchorLeft = null;\r\n this.anchorRight = null;\r\n this.anchorTop = null;\r\n this.anchorBottom = null;\r\n\r\n this.widthPct = null;\r\n this.heightPct = null;\r\n this.minWidthPct = null;\r\n this.minHeightPct = null;\r\n this.maxWidthPct = null;\r\n this.maxHeightPct = null;\r\n this.minWidth = 0;\r\n this.leftPct = null;\r\n this.rightPct = null;\r\n this.topPct = null;\r\n this.bottomPct = null;\r\n this.anchorLeftPct = null;\r\n this.anchorRightPct = null;\r\n this.anchorTopPct = null;\r\n this.anchorBottomPct = null;\r\n\r\n this.pivotX = 0;\r\n this.pivotY = 0;\r\n this.scaleX = 1;\r\n this.scaleY = 1;\r\n this.verticalAlign = null;\r\n this.horizontalAlign = null;\r\n this.rotation = null;\r\n this.blendMode = null;\r\n this.tint = null;\r\n this.alpha = 1;\r\n\r\n\r\n this.draggable = null;\r\n this.dragRestricted = false;\r\n this.dragRestrictAxis = null; //x, y\r\n this.dragThreshold = 0;\r\n this.dragGroup = null;\r\n this.dragContainer = null;\r\n this.droppable = null;\r\n this.droppableReparent = null;\r\n this.dropGroup = null;\r\n}\r\n\r\n\r\nmodule.exports = UISettings;\r\n\r\n\r\n","\r\nvar Library = {\r\n UI: require('./UI')\r\n};\r\n\r\n//dump everything into extras\r\n\r\nObject.assign(PIXI, Library);\r\n\r\nmodule.exports = Library;\r\n"],"sourceRoot":"."} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/emoji-regex/index.js","src/Button.js","src/CheckBox.js","src/Container.js","src/DynamicText/DynamicChar.js","src/DynamicText/DynamicText.js","src/DynamicText/DynamicTextStyle.js","src/Ease/Ease.js","src/Ease/EaseBase.js","src/Ease/ExponentialEase.js","src/InputBase.js","src/Interaction/ClickEvent.js","src/Interaction/DragDropController.js","src/Interaction/DragEvent.js","src/Interaction/InputController.js","src/Interaction/Interaction.js","src/Interaction/MouseScrollEvent.js","src/MathHelper.js","src/ScrollBar.js","src/ScrollingContainer.js","src/SliceSprite.js","src/Slider.js","src/SortableList.js","src/Sprite.js","src/Stage.js","src/Text.js","src/TextInput.js","src/Ticker.js","src/TilingSprite.js","src/Tween.js","src/UI.js","src/UIBase.js","src/UISettings.js","src"],"names":[],"mappings":";;;;;;;AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACl/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC50BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5kCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"pixi-ui.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o renderCount) {\r\n for (i = renderCount; i < spriteCache.length; i++) {\r\n var removeSprite = spriteCache[i];\r\n if (removeSprite)\r\n removeSprite.visible = false;\r\n }\r\n }\r\n\r\n var char, lineWidth = 0, lineHeight = 0, maxLineWidth = 0;\r\n\r\n for (i = 0; i < renderCount; i++) {\r\n char = renderChars[i];\r\n\r\n //get line data\r\n if (currentLine !== char.lineIndex) {\r\n currentLine = char.lineIndex;\r\n lineWidth = lineWidthData[currentLine];\r\n lineHeight = lineHeightData[currentLine];\r\n yOffset += lineHeight;\r\n\r\n\r\n\r\n switch (lineAlignmentData[currentLine]) {\r\n case 'right': xOffset = this._width - lineWidth; break;\r\n case 'center': xOffset = (this._width - lineWidth) * 0.5; break;\r\n default: xOffset = 0;\r\n }\r\n\r\n\r\n maxLineWidth = Math.max(lineWidth, maxLineWidth);\r\n }\r\n\r\n //no reason to render a blank space or 0x0 letters (no texture created)\r\n if (!char.data.texture || char.space || char.newline) {\r\n if (spriteCache[i])\r\n spriteCache[i].visible = false;\r\n continue;\r\n }\r\n\r\n\r\n //add new sprite\r\n var tex = char.data.texture, sprite = spriteCache[i];\r\n\r\n\r\n\r\n if (!sprite) {\r\n sprite = spriteCache[i] = new PIXI.Sprite(tex);\r\n sprite.anchor.set(0.5);\r\n }\r\n else\r\n sprite.texture = tex;\r\n\r\n\r\n\r\n sprite.visible = true;\r\n sprite.x = char.x + xOffset + tex.width * 0.5;\r\n sprite.y = char.y + yOffset - tex.height * 0.5 - (lineHeight - lineFontSizeData[currentLine]);\r\n\r\n\r\n sprite.tint = char.emoji ? 0xffffff : hexToInt(char.style.tint, 0xffffff);\r\n sprite.rotation = float(char.style.rotation, 0);\r\n sprite.skew.x = float(char.style.skew, 0);\r\n\r\n if (!sprite.parent)\r\n charContainer.addChild(sprite);\r\n }\r\n\r\n if (autoWidth) this.width = maxLineWidth;\r\n if (autoHeight) this.height = yOffset;\r\n };\r\n\r\n //updates the renderChar array and position chars for render\r\n this.prepareForRender = function () {\r\n var pos = new PIXI.Point(),\r\n wordIndex = 0,\r\n lineHeight = 0,\r\n lineFontSize = 0,\r\n lineIndex = 0,\r\n lineAlignment = defaultStyle.align,\r\n lastSpaceIndex = -1,\r\n lastSpaceLineWidth = 0,\r\n textHeight = 0,\r\n forceNewline = false,\r\n style,\r\n renderIndex = 0,\r\n ellipsis = false,\r\n lineFull = false,\r\n i;\r\n\r\n\r\n\r\n\r\n for (i = 0; i < charCount; i++) {\r\n var char = chars[i], lastChar = chars[i - 1];\r\n style = char.style;\r\n\r\n\r\n //lineheight\r\n lineHeight = Math.max(lineHeight, defaultStyle.lineHeight || style.lineHeight || char.data.lineHeight);\r\n\r\n if (style.overflowY !== 'visible' && lineHeight + textHeight > this._height) {\r\n if (style.overflowY === 'hidden')\r\n break;\r\n\r\n }\r\n\r\n if (char.newline)\r\n lineFull = false;\r\n\r\n\r\n //set word index\r\n if (char.space || char.newline) wordIndex++;\r\n else char.wordIndex = wordIndex;\r\n\r\n //textheight\r\n lineFontSize = Math.max(lineFontSize, style.fontSize);\r\n\r\n //lineindex\r\n char.lineIndex = lineIndex;\r\n\r\n //lineAlignment\r\n if (style.align !== defaultStyle.align) lineAlignment = style.align;\r\n\r\n\r\n if (char.space) {\r\n lastSpaceIndex = i;\r\n lastSpaceLineWidth = pos.x;\r\n }\r\n\r\n\r\n var size = Math.round(char.data.width) + float(style.letterSpacing, 0);\r\n if (!autoWidth && !forceNewline && !char.newline && pos.x + size > this._width) {\r\n if (style.wrap) {\r\n if (char.space) {\r\n forceNewline = true;\r\n }\r\n else if (lastSpaceIndex !== -1) {\r\n renderIndex -= i - lastSpaceIndex;\r\n i = lastSpaceIndex - 1;\r\n lastSpaceIndex = -1;\r\n pos.x = lastSpaceLineWidth;\r\n forceNewline = true;\r\n continue;\r\n\r\n }\r\n else if (style.breakWords) {\r\n if (lastChar) {\r\n pos.x -= lastChar.style.letterSpacing;\r\n pos.x -= lastChar.data.width;\r\n }\r\n i -= 2;\r\n renderIndex--;\r\n forceNewline = true;\r\n continue;\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n if (style.overflowX == 'hidden' && !forceNewline) {\r\n lineFull = true;\r\n if (style.ellipsis && !ellipsis) {\r\n ellipsis = true;\r\n var ellipsisData = lineEllipsisData[lineIndex];\r\n if (!ellipsisData) ellipsisData = lineEllipsisData[lineIndex] = [new DynamicChar(), new DynamicChar(), new DynamicChar()];\r\n for (var d = 0; d < 3; d++) {\r\n var dot = ellipsisData[d];\r\n dot.value = \".\";\r\n dot.data = atlas.getCharObject(dot.value, style);\r\n dot.style = style;\r\n dot.x = pos.x + char.data.xOffset;\r\n dot.y = parseFloat(style.verticalAlign) + dot.data.yOffset;\r\n dot.lineIndex = lineIndex;\r\n pos.x += Math.round(dot.data.width) + float(style.letterSpacing, 0);\r\n renderChars[renderIndex] = dot;\r\n renderIndex++;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n //Update position and add to renderchars\r\n if (!lineFull) {\r\n //position\r\n char.x = pos.x + char.data.xOffset;\r\n char.y = parseFloat(style.verticalAlign) + char.data.yOffset;\r\n pos.x += size;\r\n renderChars[renderIndex] = char;\r\n renderIndex++;\r\n }\r\n\r\n\r\n\r\n //new line\r\n if (forceNewline || char.newline || i === charCount - 1) {\r\n if (lastChar) {\r\n pos.x -= lastChar.style.letterSpacing;\r\n if (lastChar.space) pos.x -= lastChar.data.width;\r\n }\r\n\r\n if (char.space) {\r\n pos.x -= char.data.width;\r\n pos.x -= float(style.letterSpacing, 0);\r\n }\r\n\r\n textHeight += lineHeight;\r\n lineHasEllipsis[lineIndex] = ellipsis;\r\n lineWidthData[lineIndex] = pos.x;\r\n lineHeightData[lineIndex] = lineHeight;\r\n lineFontSizeData[lineIndex] = lineFontSize;\r\n lineAlignmentData[lineIndex] = lineAlignment;\r\n\r\n\r\n //reset line vaules\r\n lineHeight = pos.x = lastSpaceLineWidth = lineFontSize = 0;\r\n lineAlignment = defaultStyle.align;\r\n lastSpaceIndex = -1;\r\n lineIndex++;\r\n forceNewline = lineFull = ellipsis = false;\r\n\r\n }\r\n\r\n }\r\n\r\n renderCount = renderIndex;\r\n };\r\n\r\n //phrases the input text and prepares the char array\r\n var closeTags = ['', '', '', '
'];\r\n this.processInputText = function () {\r\n var styleTree = [defaultStyle],\r\n charIndex = 0,\r\n inputTextIndex = 0,\r\n inputArray = Array.from(this._inputText);\r\n\r\n for (var i = 0; i < inputArray.length; i++) {\r\n style = styleTree[styleTree.length - 1];\r\n var c = inputArray[i],\r\n charcode = c.charCodeAt(0),\r\n newline = false,\r\n space = false,\r\n emoji = false;\r\n\r\n\r\n //Extract Tags\r\n if (/(?:\\r\\n|\\r|\\n)/.test(c))\r\n newline = true;\r\n else if (/(\\s)/.test(c))\r\n space = true;\r\n else if (options.allowTags && c === \"<\") {\r\n var tag = this._inputText.substring(inputTextIndex);\r\n tag = tag.slice(0, tag.indexOf(\">\") + 1);\r\n var FoundTag = true;\r\n if (tag.length) {\r\n if (tag === \"\") {\r\n style = style.clone();\r\n style.fontStyle = 'italic';\r\n styleTree.push(style);\r\n }\r\n else if (tag === \"\") {\r\n style = style.clone();\r\n style.fontWeight = 'bold';\r\n styleTree.push(style);\r\n }\r\n else if (tag === \"
\") {\r\n style = style.clone();\r\n style.align = 'center';\r\n styleTree.push(style);\r\n }\r\n else if (closeTags.indexOf(tag) !== -1) {\r\n if (styleTree.length > 1) styleTree.splice(styleTree.length - 1, 1);\r\n }\r\n else if (tag.startsWith(\"\\s]*)(?=\\s|\\/>))(?=[^<]*>)/g,\r\n match = regex.exec(tag);\r\n\r\n if (match !== null) {\r\n style = style.clone();\r\n while (match !== null) {\r\n switch (match[1]) {\r\n case 'family': match[1] = 'fontFamily'; break;\r\n case 'size': match[1] = 'fontSize'; break;\r\n case 'weight': match[1] = 'fontWeight'; break;\r\n case 'style': match[1] = 'fontStyle'; break;\r\n case 'valign': match[1] = 'verticalAlign'; break;\r\n case 'spacing': match[1] = 'letterSpacing'; break;\r\n case 'color': match[1] = 'tint'; break;\r\n\r\n }\r\n style[match[1]] = match[4];\r\n match = regex.exec(tag);\r\n }\r\n styleTree.push(style);\r\n }\r\n }\r\n else {\r\n FoundTag = false;\r\n }\r\n\r\n if (FoundTag) {\r\n inputTextIndex += tag.length;\r\n i += tag.length - 1;\r\n continue;\r\n }\r\n }\r\n }\r\n else {\r\n //detect emoji\r\n var emojiMatch = emojiRegex().exec(c);\r\n if (emojiMatch !== null) {\r\n i--; c = '';\r\n while (emojiMatch !== null && c !== emojiMatch[0]) {\r\n i++;\r\n c = emojiMatch[0];\r\n emojiMatch = emojiRegex().exec(c + inputArray[i + 1]);\r\n }\r\n emoji = true;\r\n }\r\n }\r\n\r\n\r\n //Prepare DynamicChar object\r\n var char = chars[charIndex];\r\n if (!char) {\r\n char = new DynamicChar();\r\n chars[charIndex] = char;\r\n }\r\n char.style = style;\r\n\r\n\r\n if (emoji) {\r\n char.style = char.style.clone();\r\n char.style.fontFamily = DynamicText.settings.defaultEmojiFont;\r\n }\r\n\r\n char.data = atlas.getCharObject(c, char.style);\r\n char.value = c;\r\n char.space = space;\r\n char.newline = newline;\r\n char.emoji = emoji;\r\n\r\n charIndex++;\r\n inputTextIndex += c.length;\r\n }\r\n charCount = charIndex;\r\n };\r\n\r\n //PIXIUI update, lazy update (bad solution needs rewrite when converted to pixi plugin)\r\n this.lazyUpdate = null;\r\n var self = this;\r\n this.update = function () {\r\n if (self.lazyUpdate !== null) return;\r\n self.lazyUpdate = setTimeout(function () {\r\n \r\n console.log(\"UPDATING TEXT\");\r\n var dirtySize = !autoWidth && (self._width != lastWidth || self._height != lastHeight || self.dirtyText);\r\n\r\n if (self.dirtyText || self.dirtyStyle) {\r\n self.dirtyText = self.dirtyStyle = false;\r\n self.dirtyRender = true; //force render after textchange\r\n self.processInputText();\r\n }\r\n\r\n if (dirtySize || self.dirtyRender) {\r\n self.dirtyRender = false;\r\n lastWidth = self._width;\r\n lastHeight = self.height;\r\n self.prepareForRender();\r\n self.render();\r\n }\r\n self.lazyUpdate = null;\r\n }, 0);\r\n\r\n };\r\n}\r\n\r\n\r\nDynamicText.prototype = Object.create(UIBase.prototype);\r\nDynamicText.prototype.constructor = DynamicText;\r\nmodule.exports = DynamicText;\r\nDynamicText.settings = {\r\n debugSpriteSheet: false,\r\n defaultEmojiFont: \"Segoe UI Emoji\" //force one font family for emojis so we dont rerender them multiple times\r\n};\r\n\r\nObject.defineProperties(DynamicText.prototype, {\r\n value: {\r\n get: function () {\r\n return this._inputText;\r\n },\r\n set: function (val) {\r\n if (val !== this._inputText) {\r\n this._inputText = val;\r\n this.dirtyText = true;\r\n this.update();\r\n console.log(\"Updating Text to: \" + val);\r\n }\r\n }\r\n },\r\n text: {\r\n get: function () {\r\n return this.value;\r\n },\r\n set: function (val) {\r\n \r\n this.value = val;\r\n }\r\n },\r\n style: {\r\n get: function () {\r\n return this._style;\r\n },\r\n set: function (val) {\r\n //get a clean default style\r\n var style = new DynamicTextStyle(this);\r\n\r\n //merge it with new style\r\n style.merge(val);\r\n\r\n //merge it onto this default style\r\n this._style.merge(style);\r\n\r\n this.dirtyStyle = true;\r\n this.update();\r\n }\r\n }\r\n});\r\n\r\n\r\n\r\n\r\n\r\n\r\n//Atlas\r\nvar metricsCanvas = document.createElement(\"canvas\");\r\nvar metricsContext = metricsCanvas.getContext(\"2d\");\r\nmetricsCanvas.width = 100;\r\nmetricsCanvas.height = 100;\r\n\r\n\r\nvar DynamicAtlas = function (padding) {\r\n var res = devicePixelRatio || 1,\r\n canvas,\r\n context,\r\n objects,\r\n newObjects = [],\r\n baseTexture,\r\n lazyTimeout,\r\n rootNode,\r\n canvasList = [],\r\n atlasdim,\r\n startdim = 256,\r\n maxdim = 2048;\r\n\r\n\r\n var AtlasNode = function (w, h) {\r\n var children = this.children = [];\r\n this.rect = new PIXI.Rectangle(0, 0, w || 0, h || 0);\r\n this.data = null;\r\n\r\n this.insert = function (width, height, obj) {\r\n if (children.length > 0) {\r\n var newNode = children[0].insert(width, height, obj);\r\n if (newNode !== null) return newNode;\r\n\r\n return children[1].insert(width, height, obj);\r\n } else {\r\n if (this.data !== null) return null;\r\n if (width > this.rect.width || height > this.rect.height) return null;\r\n if (width == this.rect.width && height == this.rect.height) {\r\n this.data = obj;\r\n obj.frame.x = this.rect.x;\r\n obj.frame.y = this.rect.y;\r\n return this;\r\n }\r\n\r\n children.push(new AtlasNode());\r\n children.push(new AtlasNode());\r\n\r\n var dw = this.rect.width - width;\r\n var dh = this.rect.height - height;\r\n\r\n if (dw > dh) {\r\n children[0].rect = new PIXI.Rectangle(this.rect.x, this.rect.y, width, this.rect.height);\r\n children[1].rect = new PIXI.Rectangle(this.rect.x + width, this.rect.y, this.rect.width - width, this.rect.height);\r\n } else {\r\n children[0].rect = new PIXI.Rectangle(this.rect.x, this.rect.y, this.rect.width, height);\r\n children[1].rect = new PIXI.Rectangle(this.rect.x, this.rect.y + height, this.rect.width, this.rect.height - height);\r\n }\r\n\r\n return children[0].insert(width, height, obj);\r\n }\r\n };\r\n };\r\n\r\n var addCanvas = function () {\r\n //create new canvas\r\n canvas = document.createElement(\"canvas\");\r\n context = canvas.getContext(\"2d\");\r\n canvasList.push(canvas);\r\n\r\n //reset dimentions\r\n atlasdim = startdim;\r\n canvas.width = canvas.height = atlasdim;\r\n rootNode = new AtlasNode(atlasdim, atlasdim);\r\n\r\n //reset array with canvas objects and create new atlas\r\n objects = [];\r\n\r\n //set new basetexture\r\n baseTexture = PIXI.BaseTexture.fromCanvas(canvas);\r\n baseTexture.mipmap = false; //if not, pixi bug resizing POW2\r\n baseTexture.resolution = 1; //todo: support all resolutions\r\n baseTexture.update();\r\n\r\n //Debug Spritesheet\r\n if (DynamicText.settings.debugSpriteSheet) {\r\n canvas.className = \"DynamicText_SpriteSheet\";\r\n document.body.appendChild(canvas);\r\n }\r\n\r\n };\r\n\r\n this.fontFamilyCache = {};\r\n\r\n var drawObjects = function (arr, resized) {\r\n if (resized) baseTexture.update();\r\n for (var i = 0; i < arr.length; i++)\r\n drawObject(arr[i]);\r\n };\r\n\r\n var drawObject = function (obj) {\r\n context.drawImage(obj._cache, obj.frame.x, obj.frame.y);\r\n obj.texture.frame = obj.frame;\r\n obj.texture.update();\r\n };\r\n\r\n this.getCharObject = function (char, style) {\r\n var font = style.ctxFont();\r\n\r\n //create new cache for fontFamily\r\n var familyCache = this.fontFamilyCache[font];\r\n if (!familyCache) {\r\n familyCache = {};\r\n this.fontFamilyCache[font] = familyCache;\r\n }\r\n\r\n\r\n\r\n //get char data\r\n var key = style.ctxKey(char);\r\n var obj = familyCache[key];\r\n if (!obj) {\r\n //create char object\r\n var metrics = generateCharData(char, style);\r\n\r\n\r\n\r\n //temp resize if doesnt fit (not nesseary when we dont need to generate textures)\r\n if (metrics.rect) {\r\n if (canvas.width < metrics.rect.width || canvas.height < metrics.rect.height) {\r\n canvas.width = canvas.height = Math.max(metrics.rect.width, metrics.rect.height);\r\n baseTexture.update();\r\n }\r\n }\r\n\r\n\r\n //todo: cleanup when we know whats needed\r\n obj = {\r\n metrics: metrics,\r\n font: font,\r\n value: char,\r\n frame: metrics.rect,\r\n baseTexture: metrics.rect ? baseTexture : null,\r\n xOffset: metrics.bounds ? metrics.bounds.minx : 0,\r\n yOffset: metrics.descent || 0,\r\n width: metrics.width || 0,\r\n lineHeight: metrics.lineHeight || 0,\r\n _cache: metrics.canvas,\r\n texture: metrics.rect ? new PIXI.Texture(baseTexture, metrics.rect) : null //temp texture\r\n };\r\n\r\n //add to collections\r\n familyCache[key] = obj;\r\n\r\n\r\n //add to atlas if visible char\r\n if (metrics.rect) {\r\n newObjects.push(obj);\r\n\r\n\r\n\r\n if (lazyTimeout === undefined)\r\n lazyTimeout = setTimeout(function () {\r\n addNewObjects();\r\n lazyTimeout = undefined;\r\n }, 0);\r\n\r\n }\r\n }\r\n\r\n return obj;\r\n };\r\n\r\n var compareFunction = function (a, b) {\r\n if (a.frame.height < b.frame.height)\r\n return 1;\r\n\r\n if (a.frame.height > b.frame.height)\r\n return -1;\r\n\r\n\r\n if (a.frame.width < b.frame.width)\r\n return 1;\r\n\r\n if (a.frame.width > b.frame.width)\r\n return -1;\r\n\r\n\r\n return 0;\r\n };\r\n\r\n var addNewObjects = function () {\r\n newObjects.sort(compareFunction);\r\n var _resized = false;\r\n var _newcanvas = false;\r\n\r\n for (var i = 0; i < newObjects.length; i++) {\r\n var obj = newObjects[i];\r\n var node = rootNode.insert(obj.frame.width + padding, obj.frame.height + padding, obj);\r\n\r\n if (node !== null) {\r\n if (_newcanvas) obj.texture.baseTexture = baseTexture; //update basetexture if new canvas was created (temp)\r\n objects.push(obj);\r\n continue;\r\n }\r\n\r\n //step one back (so it will be added after resize/new canvas)\r\n i--;\r\n\r\n if (atlasdim < maxdim) {\r\n _resized = true;\r\n resizeCanvas(atlasdim * 2);\r\n continue;\r\n }\r\n\r\n //close current spritesheet and make a new one\r\n drawObjects(objects, _resized);\r\n addCanvas();\r\n _newcanvas = true;\r\n _resized = false;\r\n }\r\n\r\n drawObjects(_resized || _newcanvas ? objects : newObjects, _resized);\r\n newObjects = [];\r\n };\r\n\r\n var resizeCanvas = function (dim) {\r\n canvas.width = canvas.height = atlasdim = dim;\r\n\r\n rootNode = new AtlasNode(dim, dim);\r\n objects.sort(compareFunction);\r\n\r\n for (var i = 0; i < objects.length; i++) {\r\n var obj = objects[i];\r\n rootNode.insert(obj.frame.width + padding, obj.frame.height + padding, obj);\r\n }\r\n };\r\n\r\n var generateCharData = function (char, style) {\r\n\r\n var fontSize = Math.max(1, int(style.fontSize, 26)),\r\n lineHeight = fontSize * 1.25;\r\n\r\n\r\n //Start our returnobject\r\n var data = {\r\n fontSize: fontSize,\r\n lineHeight: lineHeight,\r\n width: 0\r\n };\r\n\r\n //Return if newline\r\n if (!char || /(?:\\r\\n|\\r|\\n)/.test(char))\r\n return data;\r\n\r\n //Ctx font string\r\n var font = style.ctxFont();\r\n metricsContext.font = font;\r\n\r\n //Get char width\r\n data.width = Math.round(metricsContext.measureText(char).width);\r\n\r\n //Return if char = space\r\n if (/(\\s)/.test(char)) return data;\r\n\r\n //set canvas size (with padding so we can messure)\r\n var paddingY = Math.round(fontSize * 0.7), paddingX = Math.max(5, Math.round(fontSize * 0.7));\r\n metricsCanvas.width = Math.ceil(data.width) + paddingX * 2;\r\n metricsCanvas.height = 1.5 * fontSize;\r\n var w = metricsCanvas.width, h = metricsCanvas.height, baseline = (h / 2) + (paddingY * 0.5);\r\n\r\n //set font again after resize\r\n metricsContext.font = font;\r\n\r\n //make sure canvas is clean\r\n metricsContext.clearRect(0, 0, w, h);\r\n\r\n //save clean state with font\r\n metricsContext.save();\r\n\r\n //convert shadow string to shadow data\r\n var shadowData = function (str) {\r\n var data = str.trim().split(' ');\r\n return {\r\n color: string(data[0], \"#000000\"),\r\n alpha: float(data[1], 0.5),\r\n xOffset: float(data[2], 3),\r\n yOffset: float(data[3], 3),\r\n blur: float(data[4], 5)\r\n };\r\n };\r\n\r\n //convert fill string to fill data\r\n var fillData = function (str) {\r\n var data = str.trim().split(' ');\r\n var c = string(data[0], \"#FFFFFF\");\r\n var a = float(data[1], 1);\r\n return {\r\n color: c,\r\n alpha: a,\r\n position: float(data[2], -1),\r\n rgba: hexToRgba(c, a)\r\n };\r\n };\r\n\r\n //create fill style from fill string\r\n var getFillStyle = function (str) {\r\n var fills = str.split(',').filter(function (s) { return s !== ''; }), i;\r\n\r\n //convert to fill data\r\n for (i = 0; i < fills.length; i++) fills[i] = fillData(fills[i]);\r\n\r\n switch (fills.length) {\r\n case 0: return \"white\";\r\n case 1: return fills[0].rgba ? fills[0].rgba : fills[0].color || \"#FFFFFF\";\r\n default:\r\n //make gradient\r\n try {\r\n var gradEnd = baseline + lineHeight - fontSize,\r\n gradient = metricsContext.createLinearGradient(0, gradEnd - fontSize, 0, gradEnd);\r\n\r\n for (i = 0; i < fills.length; i++)\r\n gradient.addColorStop(fills[i].position !== -1 ? fills[i].position : i / (fills.length - 1), fills[i].rgba || fills[i].color);\r\n\r\n return gradient;\r\n }\r\n catch (e) {\r\n return \"#FFFFFF\";\r\n }\r\n }\r\n };\r\n\r\n\r\n //function to draw shadows\r\n var drawShadows = function (shadowString, stroke) {\r\n var shadows = shadowString.trim().split(',').filter(function (s) { return s !== ''; });\r\n if (shadows.length) {\r\n for (var i = 0; i < shadows.length; i++) {\r\n var s = shadowData(shadows[i]);\r\n metricsContext.globalAlpha = s.alpha;\r\n metricsContext.shadowColor = s.color;\r\n metricsContext.shadowOffsetX = s.xOffset + w;\r\n metricsContext.shadowOffsetY = s.yOffset;\r\n metricsContext.shadowBlur = s.blur;\r\n\r\n if (stroke) {\r\n metricsContext.lineWidth = style.stroke;\r\n metricsContext.strokeText(char, paddingX - w, baseline);\r\n }\r\n else metricsContext.fillText(char, paddingX - w, baseline);\r\n }\r\n metricsContext.restore();\r\n }\r\n };\r\n\r\n //draw text shadows\r\n if (style.shadow.length)\r\n drawShadows(style.shadow, false);\r\n\r\n //draw stroke shadows\r\n if (style.stroke && style.strokeShadow.length) {\r\n drawShadows(style.strokeShadow, true);\r\n }\r\n\r\n //draw text\r\n metricsContext.fillStyle = getFillStyle(string(style.fill, \"#000000\"));\r\n metricsContext.fillText(char, paddingX, baseline);\r\n metricsContext.restore();\r\n\r\n //draw stroke\r\n if (style.stroke) {\r\n metricsContext.strokeStyle = getFillStyle(string(style.strokeFill, \"#000000\"));\r\n metricsContext.lineWidth = style.stroke;\r\n metricsContext.strokeText(char, paddingX, baseline);\r\n metricsContext.restore();\r\n }\r\n\r\n\r\n //begin messuring\r\n var pixelData = metricsContext.getImageData(0, 0, w, h).data;\r\n\r\n var i = 3,\r\n line = w * 4,\r\n len = pixelData.length;\r\n\r\n\r\n\r\n //scanline on alpha\r\n while (i < len && !pixelData[i]) { i += 4; }\r\n var ascent = (i / line) | 0;\r\n\r\n\r\n if (i < len) {\r\n //rev scanline on alpha\r\n i = len - 1;\r\n while (i > 0 && !pixelData[i]) { i -= 4; }\r\n var descent = (i / line) | 0;\r\n\r\n\r\n //left to right scanline on alpha\r\n for (i = 3; i < len && !pixelData[i];) {\r\n i += line;\r\n if (i >= len) { i = (i - len) + 4; }\r\n }\r\n var minx = ((i % line) / 4) | 0;\r\n\r\n //right to left scanline on alpha\r\n var step = 1;\r\n for (i = len - 1; i >= 0 && !pixelData[i];) {\r\n i -= line;\r\n if (i < 0) { i = (len - 1) - (step++) * 4; }\r\n }\r\n var maxx = ((i % line) / 4) + 1 | 0;\r\n\r\n\r\n // set font metrics\r\n data.ascent = Math.round(baseline - ascent);\r\n data.descent = Math.round(descent - baseline);\r\n data.height = 1 + Math.round(descent - ascent);\r\n data.bounds = {\r\n minx: minx - paddingX,\r\n maxx: maxx - paddingX,\r\n miny: 0,\r\n maxy: descent - ascent\r\n };\r\n data.rect = {\r\n x: data.bounds.minx,\r\n y: -data.ascent - 2,\r\n width: data.bounds.maxx - data.bounds.minx + 2,\r\n height: data.ascent + data.descent + 4\r\n };\r\n\r\n\r\n //cache (for fast rearrange later)\r\n data.canvas = document.createElement(\"canvas\");\r\n data.canvas.width = data.rect.width;\r\n data.canvas.height = data.rect.height;\r\n var c = data.canvas.getContext(\"2d\");\r\n c.drawImage(metricsCanvas, -paddingX - data.rect.x, -baseline - data.rect.y);\r\n\r\n //reset rect position\r\n data.rect.x = data.rect.y = 0;\r\n\r\n\r\n }\r\n return data;\r\n };\r\n\r\n addCanvas();\r\n};\r\n\r\n\r\n\r\n//helper function for float or default\r\nfunction float(val, def) {\r\n if (isNaN(val)) return def;\r\n return parseFloat(val);\r\n}\r\n\r\n//helper function for int or default\r\nfunction int(val, def) {\r\n if (isNaN(val)) return def;\r\n return parseInt(val);\r\n}\r\n\r\n//helper function for string or default\r\nfunction string(val, def) {\r\n if (typeof val === 'string' && val.length) return val;\r\n return def;\r\n}\r\n\r\n//helper function to convert string hex to int or default\r\nfunction hexToInt(str, def) {\r\n if (typeof str === 'number')\r\n return str;\r\n\r\n var result = parseInt(str.replace('#', '0x'));\r\n\r\n if (isNaN(result)) return def;\r\n return result;\r\n}\r\n\r\n//helper function to convert hex to rgba\r\nfunction hexToRgba(hex, alpha) {\r\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n alpha = float(alpha, 1);\r\n return result ? \"rgba(\" + parseInt(result[1], 16) + \",\" + parseInt(result[2], 16) + \",\" + parseInt(result[3], 16) + \",\" + alpha + \")\" : false;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","function DynamicTextStyle(parent) {\r\n this.respectDirty = true;\r\n this._parent = parent || null;\r\n this._scale = 1;\r\n this._align = 'left';\r\n this._fontFamily = 'Arial';\r\n this._fontSize = 26;\r\n this._fontWeight = 'normal';\r\n this._fontStyle = 'normal';\r\n this._letterSpacing = 0;\r\n this._lineHeight = 0;\r\n this._verticalAlign = 0;\r\n this._rotation = 0;\r\n this._skew = 0;\r\n this._tint = \"#FFFFFF\";\r\n this._fill = '#FFFFFF';\r\n this._shadow = '';\r\n this._stroke = 0;\r\n this._strokeFill = '';\r\n this._strokeShadow = '';\r\n this._wrap = true;\r\n this._breakWords = false;\r\n this._overflowX = 'visible'; //visible|hidden\r\n this._overflowY = 'visible'; //visible|hidden\r\n this._ellipsis = false;\r\n\r\n\r\n var _cachedEllipsisSize = null;\r\n this.ellipsisSize = function (atlas) {\r\n if (!this.ellipsis) return 0;\r\n if (_cachedEllipsisSize === null)\r\n _cachedEllipsisSize = (atlas.getCharObject(\".\", this).width + this.letterSpacing) * 3;\r\n return _cachedEllipsisSize;\r\n };\r\n}\r\n\r\n\r\nDynamicTextStyle.prototype.clone = function () {\r\n var style = new DynamicTextStyle();\r\n style.merge(this);\r\n return style;\r\n};\r\n\r\nDynamicTextStyle.prototype.merge = function (style) {\r\n\r\n if (typeof style === 'object') {\r\n this.respectDirty = false;\r\n for (var param in style) {\r\n var val = style[param];\r\n if (typeof val === 'function' || param === 'respectDirty' || param === '_parent') continue;\r\n this[param] = style[param];\r\n }\r\n this.respectDirty = true;\r\n this._dirty = true;\r\n }\r\n};\r\n\r\nDynamicTextStyle.prototype.ctxKey = function (char) {\r\n return [char, this.fill, this.shadow, this.stroke, this.strokeFill, this.strokeShadow].join('|');\r\n};\r\n\r\nDynamicTextStyle.prototype.ctxFont = function () {\r\n var fontSize = Math.min(200, Math.max(1, this.fontSize || 26)) + \"px \";\r\n var fontWeight = this.fontWeight === \"bold\" ? this.fontWeight + \" \" : \"\";\r\n var fontStyle = this.fontStyle === \"italic\" || this.fontStyle === \"oblique\" ? this.fontStyle + \" \" : \"\";\r\n return fontWeight + fontStyle + fontSize + this.fontFamily;\r\n};\r\n\r\nDynamicTextStyle.prototype.constructor = DynamicTextStyle;\r\nmodule.exports = DynamicTextStyle;\r\n\r\nObject.defineProperties(DynamicTextStyle.prototype, {\r\n _dirty: {\r\n set: function (val) {\r\n if (this.respectDirty) {\r\n if (this._parent !== null) {\r\n this._parent.dirtyStyle = val;\r\n this._parent.update();\r\n }\r\n }\r\n }\r\n },\r\n scale: {\r\n get: function () {\r\n return this._scale;\r\n },\r\n set: function (val) {\r\n if (val !== this._scale) {\r\n this._scale = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n align: {\r\n get: function () {\r\n return this._align;\r\n },\r\n set: function (val) {\r\n if (val !== this._align) {\r\n this._align = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontFamily: {\r\n get: function () {\r\n return this._fontFamily;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontFamily) {\r\n this._fontFamily = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontSize: {\r\n get: function () {\r\n return this._fontSize;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontSize) {\r\n this._fontSize = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontWeight: {\r\n get: function () {\r\n return this._fontWeight;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontWeight) {\r\n this._fontWeight = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontStyle: {\r\n get: function () {\r\n return this._fontStyle;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontStyle) {\r\n this._fontStyle = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n letterSpacing: {\r\n get: function () {\r\n return this._letterSpacing;\r\n },\r\n set: function (val) {\r\n if (val !== this._letterSpacing) {\r\n this._letterSpacing = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n lineHeight: {\r\n get: function () {\r\n return this._lineHeight;\r\n },\r\n set: function (val) {\r\n if (val !== this._lineHeight) {\r\n this._lineHeight = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n verticalAlign: {\r\n get: function () {\r\n return this._verticalAlign;\r\n },\r\n set: function (val) {\r\n if (val !== this._verticalAlign) {\r\n this._verticalAlign = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n rotation: {\r\n get: function () {\r\n return this._rotation;\r\n },\r\n set: function (val) {\r\n if (val !== this._rotation) {\r\n this._rotation = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n skew: {\r\n get: function () {\r\n return this._skew;\r\n },\r\n set: function (val) {\r\n if (val !== this._skew) {\r\n this._skew = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n tint: {\r\n get: function () {\r\n return this._tint;\r\n },\r\n set: function (val) {\r\n if (val !== this._tint) {\r\n this._tint = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fill: {\r\n get: function () {\r\n return this._fill;\r\n },\r\n set: function (val) {\r\n if (val !== this._fill) {\r\n this._fill = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n shadow: {\r\n get: function () {\r\n return this._shadow;\r\n },\r\n set: function (val) {\r\n if (val !== this._shadow) {\r\n this._shadow = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n stroke: {\r\n get: function () {\r\n return this._stroke;\r\n },\r\n set: function (val) {\r\n if (val !== this._stroke) {\r\n this._stroke = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n strokeFill: {\r\n get: function () {\r\n return this._strokeFill;\r\n },\r\n set: function (val) {\r\n if (val !== this._strokeFill) {\r\n this._strokeFill = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n strokeShadow: {\r\n get: function () {\r\n return this._strokeShadow;\r\n },\r\n set: function (val) {\r\n if (val !== this._strokeShadow) {\r\n this._strokeShadow = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n wrap: {\r\n get: function () {\r\n return this._wrap;\r\n },\r\n set: function (val) {\r\n if (val !== this._wrap) {\r\n this._wrap = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n breakWords: {\r\n get: function () {\r\n return this._breakWords;\r\n },\r\n set: function (val) {\r\n if (val !== this._breakWords) {\r\n this._breakWords = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n overflowX: {\r\n get: function () {\r\n return this._overflowX;\r\n },\r\n set: function (val) {\r\n if (val !== this._overflowX) {\r\n this._overflowX = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n overflowY: {\r\n get: function () {\r\n return this._overflowY;\r\n },\r\n set: function (val) {\r\n if (val !== this._overflowY) {\r\n this._overflowY = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n ellipsis: {\r\n get: function () {\r\n return this._ellipsis;\r\n },\r\n set: function (val) {\r\n if (val !== this._ellipsis) {\r\n this._ellipsis = val;\r\n this._dirty = true;\r\n }\r\n }\r\n }\r\n});","var Ease = {},\r\n EaseBase = require('./EaseBase'),\r\n ExponentialEase = require('./ExponentialEase'),\r\n HALF_PI = Math.PI * 0.5;\r\n\r\nfunction create(fn) {\r\n var e = Object.create(EaseBase.prototype);\r\n e.getPosition = fn;\r\n return e;\r\n}\r\n\r\n\r\n//Liear\r\nEase.Linear = new EaseBase();\r\n\r\n//Exponetial Eases\r\nfunction wrapEase(easeInFunction, easeOutFunction, easeInOutFunction) {\r\n return {\r\n easeIn: easeInFunction,\r\n easeOut: easeOutFunction,\r\n easeInOut: easeInOutFunction\r\n };\r\n}\r\n\r\nEase.Power0 = {\r\n \"easeNone\" : Ease.Linear,\r\n};\r\n\r\nEase.Power1 = Ease.Quad = wrapEase(\r\n new ExponentialEase(1, 1, 0),\r\n new ExponentialEase(1, 0, 1),\r\n new ExponentialEase(1, 1, 1));\r\n\r\nEase.Power2 = Ease.Cubic = wrapEase(\r\n new ExponentialEase(2, 1, 0),\r\n new ExponentialEase(2, 0, 1),\r\n new ExponentialEase(2, 1, 1));\r\n\r\nEase.Power3 = Ease.Quart = wrapEase(\r\n new ExponentialEase(3, 1, 0),\r\n new ExponentialEase(3, 0, 1),\r\n new ExponentialEase(3, 1, 1));\r\n\r\nEase.Power4 = Ease.Quint = wrapEase(\r\n new ExponentialEase(4, 1, 0),\r\n new ExponentialEase(4, 0, 1),\r\n new ExponentialEase(4, 1, 1));\r\n\r\n\r\n//Bounce\r\nEase.Bounce = {\r\n \"BounceIn\": create(function (p) {\r\n if ((p = 1 - p) < 1 / 2.75) {\r\n return 1 - (7.5625 * p * p);\r\n } else if (p < 2 / 2.75) {\r\n return 1 - (7.5625 * (p -= 1.5 / 2.75) * p + 0.75);\r\n } else if (p < 2.5 / 2.75) {\r\n return 1 - (7.5625 * (p -= 2.25 / 2.75) * p + 0.9375);\r\n }\r\n return 1 - (7.5625 * (p -= 2.625 / 2.75) * p + 0.984375);\r\n }),\r\n \"BounceOut\": create(function (p) {\r\n if (p < 1 / 2.75) {\r\n return 7.5625 * p * p;\r\n } else if (p < 2 / 2.75) {\r\n return 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\r\n } else if (p < 2.5 / 2.75) {\r\n return 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\r\n }\r\n return 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\r\n }),\r\n \"BounceInOut\": create(function (p) {\r\n var invert = (p < 0.5);\r\n if (invert) {\r\n p = 1 - (p * 2);\r\n } else {\r\n p = (p * 2) - 1;\r\n }\r\n if (p < 1 / 2.75) {\r\n p = 7.5625 * p * p;\r\n } else if (p < 2 / 2.75) {\r\n p = 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\r\n } else if (p < 2.5 / 2.75) {\r\n p = 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\r\n } else {\r\n p = 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\r\n }\r\n return invert ? (1 - p) * 0.5 : p * 0.5 + 0.5;\r\n })\r\n};\r\n\r\n//Circ\r\nEase.Circ = {\r\n \"CircIn\": create(function (p) {\r\n return -(Math.sqrt(1 - (p * p)) - 1);\r\n }),\r\n \"CircOut\": create(function (p) {\r\n return Math.sqrt(1 - (p = p - 1) * p);\r\n }),\r\n \"CircInOut\": create(function (p) {\r\n return ((p *= 2) < 1) ? -0.5 * (Math.sqrt(1 - p * p) - 1) : 0.5 * (Math.sqrt(1 - (p -= 2) * p) + 1);\r\n })\r\n};\r\n\r\n\r\n//Expo\r\nEase.Expo = {\r\n \"ExpoIn\": create(function (p) {\r\n return Math.pow(2, 10 * (p - 1)) - 0.001;\r\n }),\r\n \"ExpoOut\": create(function (p) {\r\n return 1 - Math.pow(2, -10 * p);\r\n }),\r\n \"ExpoInOut\": create(function (p) {\r\n return ((p *= 2) < 1) ? 0.5 * Math.pow(2, 10 * (p - 1)) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\r\n })\r\n};\r\n\r\n\r\n//Sine\r\nEase.Sine = {\r\n \"SineIn\": create(function (p) {\r\n return -Math.cos(p * HALF_PI) + 1;\r\n }),\r\n \"SineOut\": create(function (p) {\r\n return Math.sin(p * HALF_PI);\r\n }),\r\n \"SineInOut\": create(function (p) {\r\n return -0.5 * (Math.cos(Math.PI * p) - 1);\r\n })\r\n};\r\n\r\n\r\nmodule.exports = Ease;\r\n\r\n\r\n","function EaseBase() {\r\n this.getPosition = function (p) {\r\n return p;\r\n };\r\n}\r\n\r\nEaseBase.prototype.constructor = EaseBase;\r\nmodule.exports = EaseBase;\r\n\r\n\r\n\r\n","var EaseBase = require('./EaseBase');\r\n\r\nfunction ExponentialEase(power, easeIn, easeOut) {\r\n var pow = power;\r\n var t = easeIn && easeOut ? 3 : easeOut ? 1 : 2;\r\n this.getPosition = function (p) {\r\n var r = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2;\n if (pow === 1) {\r\n r *= r;\r\n } else if (pow === 2) {\r\n r *= r * r;\r\n } else if (pow === 3) {\r\n r *= r * r * r;\r\n } else if (pow === 4) {\r\n r *= r * r * r * r;\r\n }\n return (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2);\r\n };\r\n}\r\n\r\nExponentialEase.prototype = Object.create(EaseBase.prototype);\r\nExponentialEase.prototype.constructor = ExponentialEase;\r\nmodule.exports = ExponentialEase;\r\n\r\n\r\n\r\n","var UIBase = require('./UIBase'),\r\n InputController = require('./Interaction/InputController'),\r\n ClickEvent = require('./Interaction/ClickEvent');\r\n/**\r\n * base object for all Input type objects\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param width {number} passed to uibase\r\n * @param height {number} passed to uibase\r\n * @param tabIndex {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for input\r\n */\r\nfunction InputBase(width, height, tabIndex, tabGroup) {\r\n UIBase.call(this, width, height);\r\n var self = this;\r\n this._focused = false;\r\n this._useTab = this._usePrev = this._useNext = true;\r\n this.container.interactive = true;\r\n InputController.registrer(this, tabIndex, tabGroup);\r\n\r\n\r\n var keyDownEvent = function (e) {\r\n if (e.which === 9) {\r\n if (self._useTab) {\r\n InputController.fireTab();\r\n e.preventDefault();\r\n }\r\n }\r\n else if (e.which === 38) {\r\n if (self._usePrev) {\r\n InputController.firePrev();\r\n e.preventDefault();\r\n }\r\n }\r\n else if (e.which === 40) {\r\n if (self._useNext) {\r\n InputController.fireNext();\r\n e.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n var documentMouseDown = function (e) {\r\n if (!self.__down)\r\n self.blur();\r\n };\r\n\r\n this.container.on(\"pointerdown\", function (e) {\r\n self.focus();\r\n self.__down = true;\r\n });\r\n\r\n this.container.on(\"pointerup\", function (e) {\r\n self.__down = false;\r\n });\r\n\r\n this.container.on(\"pointerupoutside\", function (e) {\r\n self.__down = false;\r\n });\r\n\r\n //var cancelFocusEvent = new ClickEvent(this.stage)\r\n\r\n this._bindEvents = function () {\r\n if (this.stage !== null) {\r\n this.stage.on(\"pointerdown\", documentMouseDown);\r\n document.addEventListener(\"keydown\", keyDownEvent);\r\n }\r\n };\r\n\r\n this._clearEvents = function () {\r\n if (this.stage !== null) {\r\n this.stage.off(\"pointerdown\", documentMouseDown);\r\n document.removeEventListener(\"keydown\", keyDownEvent);\r\n }\r\n };\r\n}\r\n\r\nInputBase.prototype = Object.create(UIBase.prototype);\r\nInputBase.prototype.constructor = InputBase;\r\nmodule.exports = InputBase;\r\n\r\nInputBase.prototype.focus = function () {\r\n if (!this._focused) {\r\n this._focused = true;\r\n this._bindEvents();\r\n InputController.set(this);\r\n this.emit(\"focusChanged\", true);\r\n this.emit(\"focus\");\r\n\r\n }\r\n};\r\n\r\nInputBase.prototype.blur = function () {\r\n if (this._focused) {\r\n InputController.clear();\r\n this._focused = false;\r\n this._clearEvents();\r\n this.emit(\"focusChanged\", false);\r\n this.emit(\"blur\");\r\n\r\n }\r\n};","var ClickEvent = function (obj) {\r\n var bound = false,\r\n self = this,\r\n id = 0,\r\n ishover = false,\r\n mouse = new PIXI.Point(),\r\n offset = new PIXI.Point(),\r\n movementX = 0,\r\n movementY = 0;\r\n \r\n\r\n obj.container.interactive = true;\r\n\r\n var _onMouseDown = function (event) {\r\n mouse.copy(event.data.global);\r\n id = event.data.identifier;\r\n self.onPress.call(obj, event, true);\r\n if (!bound) {\r\n obj.container.on('mouseup', _onMouseUp);\r\n obj.container.on('mouseupoutside', _onMouseUpOutside);\r\n obj.container.on('touchend', _onMouseUp);\r\n obj.container.on('touchendoutside', _onMouseUpOutside);\r\n bound = true;\r\n }\r\n };\r\n\r\n var _mouseUpAll = function (event) {\r\n if (event.data.identifier !== id) return;\r\n offset.set(event.data.global.x - mouse.x, event.data.global.y - mouse.y);\r\n if (bound) {\r\n obj.container.removeListener('mouseup', _onMouseUp);\r\n obj.container.removeListener('mouseupoutside', _onMouseUpOutside);\r\n obj.container.removeListener('touchend', _onMouseUp);\r\n obj.container.removeListener('touchendoutside', _onMouseUpOutside);\r\n bound = false;\r\n }\r\n self.onPress.call(obj, event, false);\r\n };\r\n\r\n var _onMouseUp = function (event) {\r\n if (event.data.identifier !== id) return;\r\n _mouseUpAll(event);\r\n\r\n movementX = Math.abs(offset.x);\r\n movementY = Math.abs(offset.y);\r\n if (Math.max(movementX, movementY) > obj.dragThreshold) return; \r\n\r\n self.onClick.call(obj, event);\r\n };\r\n\r\n var _onMouseUpOutside = function (event) {\r\n if (event.data.identifier !== id) return;\r\n _mouseUpAll(event);\r\n };\r\n\r\n var _onMouseOver = function (event) {\r\n if (!ishover) {\r\n ishover = true;\r\n self.onHover.call(obj, event);\r\n }\r\n };\r\n\r\n var _onMouseOut = function (event) {\r\n if (ishover) {\r\n ishover = false;\r\n self.onLeave.call(obj, event);\r\n }\r\n };\r\n\r\n this.stopEvent = function () {\r\n if (bound) {\r\n obj.container.removeListener('mouseup', _onMouseUp);\r\n obj.container.removeListener('mouseupoutside', _onMouseUpOutside);\r\n obj.container.removeListener('touchend', _onMouseUp);\r\n obj.container.removeListener('touchendoutside', _onMouseUpOutside);\r\n bound = false;\r\n }\r\n obj.container.removeListener('mousedown', _onMouseDown);\r\n obj.container.removeListener('touchstart', _onMouseDown);\r\n obj.container.removeListener('mouseover', _onMouseOver);\r\n obj.container.removeListener('mouseout', _onMouseOut);\r\n };\r\n\r\n this.startEvent = function () {\r\n obj.container.on('mousedown', _onMouseDown);\r\n obj.container.on('touchstart', _onMouseDown);\r\n obj.container.on('mouseover', _onMouseOver);\r\n obj.container.on('mouseout', _onMouseOut);\r\n };\r\n\r\n this.startEvent();\r\n};\r\n\r\nClickEvent.prototype.constructor = ClickEvent;\r\nmodule.exports = ClickEvent;\r\n\r\nClickEvent.prototype.onHover = function (event) { };\r\nClickEvent.prototype.onLeave = function (event) { };\r\nClickEvent.prototype.onPress = function (event, isPressed) { };\r\nClickEvent.prototype.onClick = function (event) { };","var _items = [];\r\nvar DragDropController = {\r\n add: function (item, event) {\r\n item._dragDropEventId = event.data.identifier;\r\n if (_items.indexOf(item) === -1) {\r\n _items.push(item);\r\n return true;\r\n }\r\n return false;\r\n },\r\n getItem: function (object) {\r\n var item = null, index;\r\n for (var i = 0; i < _items.length; i++) {\r\n if (_items[i] === object) {\r\n item = _items[i];\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (item !== null) {\r\n _items.splice(index, 1);\r\n return item;\r\n }\r\n else {\r\n return false;\r\n }\r\n },\r\n getEventItem: function (event, group) {\r\n var item = null, index, id = event.data.identifier;\r\n for (var i = 0; i < _items.length; i++) {\r\n if (_items[i]._dragDropEventId === id) {\r\n if (group !== _items[i].dragGroup) {\r\n return false;\r\n }\r\n item = _items[i];\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (item !== null) {\r\n _items.splice(index, 1);\r\n return item;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n};\r\n\r\nmodule.exports = DragDropController;","var DragEvent = function (obj) {\r\n var bound = false,\r\n start = new PIXI.Point(),\r\n offset = new PIXI.Point(),\r\n mouse = new PIXI.Point(),\r\n movementX = 0,\r\n movementY = 0,\r\n cancel = false,\r\n dragging = false,\r\n self = this,\r\n id = 0;\r\n\r\n obj.container.interactive = true;\r\n\r\n var _onDragStart = function (e) {\r\n id = e.data.identifier;\r\n self.onPress.call(obj, e, true);\r\n if (!bound) {\r\n start.copy(e.data.global);\r\n obj.stage.on('mousemove', _onDragMove);\r\n obj.stage.on('touchmove', _onDragMove);\r\n obj.stage.on('mouseup', _onDragEnd);\r\n obj.stage.on('mouseupoutside', _onDragEnd);\r\n obj.stage.on('touchend', _onDragEnd);\r\n obj.stage.on('touchendoutside', _onDragEnd);\r\n obj.stage.on('touchcancel', _onDragEnd);\r\n bound = true;\r\n }\r\n };\r\n\r\n var _onDragMove = function (event) {\r\n if (event.data.identifier !== id) return;\r\n mouse.copy(event.data.global);\r\n offset.set(mouse.x - start.x, mouse.y - start.y);\r\n if (!dragging) {\r\n movementX = Math.abs(offset.x);\r\n movementY = Math.abs(offset.y);\r\n if (movementX === 0 && movementY === 0 || Math.max(movementX, movementY) < obj.dragThreshold) return; //thresshold\r\n if (obj.dragRestrictAxis !== null) {\r\n cancel = false;\r\n if (obj.dragRestrictAxis == \"x\" && movementY > movementX) cancel = true;\r\n else if (obj.dragRestrictAxis == \"y\" && movementY <= movementX) cancel = true;\r\n if (cancel) {\r\n _onDragEnd(event);\r\n return;\r\n }\r\n }\r\n self.onDragStart.call(obj, event);\r\n dragging = true;\r\n }\r\n self.onDragMove.call(obj, event, offset);\r\n };\r\n\r\n var _onDragEnd = function (event) {\r\n if (event.data.identifier !== id) return;\r\n if (bound) {\r\n obj.stage.removeListener('mousemove', _onDragMove);\r\n obj.stage.removeListener('touchmove', _onDragMove);\r\n obj.stage.removeListener('mouseup', _onDragEnd);\r\n obj.stage.removeListener('mouseupoutside', _onDragEnd);\r\n obj.stage.removeListener('touchend', _onDragEnd);\r\n obj.stage.removeListener('touchendoutside', _onDragEnd);\r\n obj.stage.removeListener('touchcancel', _onDragEnd);\r\n dragging = false;\r\n bound = false;\r\n self.onDragEnd.call(obj, event);\r\n self.onPress.call(obj, event, false);\r\n\r\n }\r\n };\r\n\r\n this.stopEvent = function () {\r\n if (bound) {\r\n obj.stage.removeListener('mousemove', _onDragMove);\r\n obj.stage.removeListener('touchmove', _onDragMove);\r\n obj.stage.removeListener('mouseup', _onDragEnd);\r\n obj.stage.removeListener('mouseupoutside', _onDragEnd);\r\n obj.stage.removeListener('touchend', _onDragEnd);\r\n obj.stage.removeListener('touchendoutside', _onDragEnd);\r\n bound = false;\r\n }\r\n obj.container.removeListener('mousedown', _onDragStart);\r\n obj.container.removeListener('touchstart', _onDragStart);\r\n };\r\n\r\n this.startEvent = function () {\r\n obj.container.on('mousedown', _onDragStart);\r\n obj.container.on('touchstart', _onDragStart);\r\n };\r\n\r\n this.startEvent();\r\n};\r\n\r\nDragEvent.prototype.constructor = DragEvent;\r\nmodule.exports = DragEvent;\r\n\r\nDragEvent.prototype.onPress = function (event, isPressed) { };\r\nDragEvent.prototype.onDragEnd = function (event) { };\r\nDragEvent.prototype.onDragMove = function (event, offset) { };\r\nDragEvent.prototype.onDragStart = function (event) { };","var _currentItem;\r\nvar tabGroups = {};\r\nvar checkGroups = {};\r\nvar checkGroupValues = {};\r\n\r\nvar InputController = {\r\n registrer: function (item, tabIndex, tabGroup) {\r\n var groupName = tabGroup || \"default\";\r\n\r\n var items = tabGroups[groupName];\r\n if (!items)\r\n items = tabGroups[groupName] = [];\r\n\r\n var i = items.indexOf(item);\r\n if (i === -1) {\r\n item._tabIndex = tabIndex !== undefined ? tabIndex : -1;\r\n item._tabGroup = items;\r\n items.push(item);\r\n items.sort(function (a, b) {\r\n if (a._tabIndex < b._tabIndex)\r\n return -1;\r\n if (a._tabIndex > b._tabIndex)\r\n return 1;\r\n return 0;\r\n });\r\n }\r\n },\r\n set: function (item) {\r\n if (_currentItem && typeof _currentItem.blur === \"function\")\r\n _currentItem.blur();\r\n _currentItem = item;\r\n },\r\n clear: function () {\r\n _currentItem = undefined;\r\n },\r\n fireTab: function () {\r\n if (_currentItem) {\r\n var i = _currentItem._tabGroup.indexOf(_currentItem) + 1;\r\n if (i >= _currentItem._tabGroup.length) i = 0;\r\n _currentItem._tabGroup[i].focus();\r\n }\r\n },\r\n fireNext: function () {\r\n if (_currentItem) {\r\n var i = _currentItem._tabGroup.indexOf(_currentItem) + 1;\r\n if (i >= _currentItem._tabGroup.length) i = _currentItem._tabGroup.length - 1;\r\n _currentItem._tabGroup[i].focus();\r\n }\r\n },\r\n firePrev: function () {\r\n if (_currentItem) {\r\n var i = _currentItem._tabGroup.indexOf(_currentItem) - 1;\r\n if (i < 0) i = 0;\r\n _currentItem._tabGroup[i].focus();\r\n }\r\n },\r\n registrerCheckGroup: function (cb) {\r\n var name = cb.checkGroup;\r\n var group = checkGroups[name];\r\n if (!group) group = checkGroups[name] = {};\r\n group[cb.value] = cb;\r\n\r\n if (cb.checked)\r\n checkGroupValues[name] = cb.value;\r\n },\r\n updateCheckGroupSelected: function (cb) {\r\n var group = checkGroups[cb.checkGroup];\r\n for (var val in group) {\r\n var b = group[val];\r\n if (b !== cb)\r\n b.checked = false;\r\n }\r\n checkGroupValues[cb.checkGroup] = cb.value;\r\n },\r\n getCheckGroupSelectedValue: function (name) {\r\n if (checkGroupValues[name])\r\n return checkGroupValues[name];\r\n return \"\";\r\n },\r\n setCheckGroupSelectedValue: function (name, val) {\r\n var group = checkGroups[name];\r\n if (group) {\r\n var cb = group[val];\r\n if (cb) {\r\n cb.checked = true;\r\n }\r\n }\r\n }\r\n};\r\n\r\nmodule.exports = InputController;","var Interaction = {\r\n ClickEvent: require('./ClickEvent'),\r\n DragEvent: require('./DragEvent'),\r\n MouseScrollEvent: require('./MouseScrollEvent')\r\n};\r\n\r\n\r\nmodule.exports = Interaction;","var MouseScrollEvent = function (obj, preventDefault) {\r\n var bound = false, delta = new PIXI.Point(), self = this;\r\n obj.container.interactive = true;\r\n\r\n var _onMouseScroll = function (event) {\r\n if (preventDefault)\r\n event.preventDefault();\r\n\r\n delta.set(event.deltaX, event.deltaY);\r\n self.onMouseScroll.call(obj, event, delta);\r\n };\r\n\r\n var _onHover = function (event) {\r\n if (!bound) {\r\n document.addEventListener(\"mousewheel\", _onMouseScroll, false);\r\n document.addEventListener(\"DOMMouseScroll\", _onMouseScroll, false);\r\n bound = true;\r\n }\r\n };\r\n\r\n var _onMouseOut = function (event) {\r\n if (bound) {\r\n document.removeEventListener(\"mousewheel\", _onMouseScroll);\r\n document.removeEventListener(\"DOMMouseScroll\", _onMouseScroll);\r\n bound = false;\r\n }\r\n };\r\n\r\n this.stopEvent = function () {\r\n if (bound) {\r\n document.removeEventListener(\"mousewheel\", _onMouseScroll);\r\n document.removeEventListener(\"DOMMouseScroll\", _onMouseScroll);\r\n bound = false;\r\n }\r\n obj.container.removeListener('mouseover', _onHover);\r\n obj.container.removeListener('mouseout', _onMouseOut);\r\n };\r\n\r\n this.startEvent = function () {\r\n obj.container.on('mouseover', _onHover);\r\n obj.container.on('mouseout', _onMouseOut);\r\n };\r\n\r\n this.startEvent();\r\n\r\n \r\n};\r\n\r\nMouseScrollEvent.prototype.constructor = MouseScrollEvent;\r\nmodule.exports = MouseScrollEvent;\r\n\r\nMouseScrollEvent.prototype.onMouseScroll = function (event, delta) { };","var MathHelper = {\r\n Lerp: function (start, stop, amt) {\r\n if (amt > 1) amt = 1;\r\n else if (amt < 0) amt = 0;\r\n return start + (stop - start) * amt;\r\n },\r\n Round: function(number, decimals) {\r\n var pow = Math.pow(10, decimals);\r\n return Math.round(number * pow) / pow;\r\n }\r\n};\r\n\r\nmodule.exports = MathHelper;","var Slider = require('./Slider'),\r\n Tween = require('./Tween'),\r\n Ease = require('./Ease/Ease');\r\n\r\n/**\r\n* An UI scrollbar to control a ScrollingContainer\r\n* \r\n* @class\r\n* @extends PIXI.UI.Slider\r\n* @memberof PIXI.UI\r\n* @param options {Object} ScrollBar settings\r\n* @param options.track {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} Any type of UIOBject, will be used for the scrollbar track\r\n* @param options.handle {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as scrollbar handle\r\n* @param options.scrollingContainer {PIXI.UI.ScrollingContainer} The container to control\r\n* @param [options.vertical=false] {boolean} Direction of the scrollbar\r\n* @param [options.autohide=false] {boolean} Hides the scrollbar when not needed\r\n*\r\n*/\r\nfunction ScrollBar(options) {\r\n Slider.call(this, { track: options.track, handle: options.handle, fill: null, vertical: options.vertical });\r\n this.scrollingContainer = options.scrollingContainer;\r\n this.autohide = options.autohide;\r\n this._hidden = false;\r\n\r\n}\r\n\r\nScrollBar.prototype = Object.create(Slider.prototype);\r\nScrollBar.prototype.constructor = ScrollBar;\r\nmodule.exports = ScrollBar;\r\n\r\n\r\nScrollBar.prototype.initialize = function () {\r\n Slider.prototype.initialize.call(this);\r\n this.decimals = 3; //up decimals to trigger ValueChanging more often\r\n\r\n this._onValueChanging = function (val) {\r\n var sizeAmt = this.scrollingContainer._height / this.scrollingContainer.innerContainer.height || 0.001;\r\n if (sizeAmt < 1)\r\n this.scrollingContainer.forcePctPosition(this.vertical ? \"y\" : \"x\", this._amt);\r\n };\r\n\r\n this.scrollingContainer._scrollBars.push(this);\r\n\r\n};\r\n\r\nScrollBar.prototype.alignToContainer = function () {\r\n var newPos,\r\n size,\r\n x_y = this.vertical ? \"y\" : \"x\",\r\n width_height = this.vertical ? \"height\" : \"width\",\r\n top_left = this.vertical ? \"top\" : \"left\",\r\n _posAmt = !this.scrollingContainer.innerContainer[width_height] ? 0 : -(this.scrollingContainer.innerContainer[x_y] / this.scrollingContainer.innerContainer[width_height]),\r\n sizeAmt = !this.scrollingContainer.innerContainer[width_height] ? 1 : this.scrollingContainer[\"_\" + width_height] / this.scrollingContainer.innerContainer[width_height];\r\n\r\n //update amt\r\n this._amt = !this.scrollingContainer[\"_\" + width_height] ? 0 : -(this.scrollingContainer.innerContainer[x_y] / (this.scrollingContainer.innerContainer[width_height] - this.scrollingContainer[\"_\" + width_height]));\r\n\r\n if (sizeAmt >= 1) {\r\n size = this[\"_\" + width_height];\r\n this.handle[top_left] = size * 0.5;\r\n this.toggleHidden(true);\r\n }\r\n else {\r\n size = this[\"_\" + width_height] * sizeAmt;\r\n if (this._amt > 1) size -= (this[\"_\" + width_height] - size) * (this._amt - 1);\r\n else if (this._amt < 0) size -= (this[\"_\" + width_height] - size) * -this._amt;\r\n if (this._amt < 0) newPos = size * 0.5;\r\n else if (this._amt > 1) newPos = this[\"_\" + width_height] - size * 0.5;\r\n else newPos = (_posAmt * this.scrollingContainer[\"_\" + width_height]) + (size * 0.5);\r\n this.handle[top_left] = newPos;\r\n this.toggleHidden(false);\r\n }\r\n this.handle[width_height] = size;\r\n};\r\n\r\n\r\nScrollBar.prototype.toggleHidden = function (hidden) {\r\n if (this.autohide) {\r\n if (hidden && !this._hidden) {\r\n Tween.to(this, 0.2, { alpha: 0 });\r\n this._hidden = true;\r\n }\r\n else if (!hidden && this._hidden) {\r\n Tween.to(this, 0.2, { alpha: 1 });\r\n this._hidden = false;\r\n }\r\n }\r\n};\r\n\r\n\r\n\r\n\r\n","var UIBase = require('./UIBase'),\r\n Container = require('./Container'),\r\n MathHelper = require('./MathHelper'),\r\n Ticker = require('./Ticker'),\r\n DragEvent = require('./Interaction/DragEvent'),\r\n MouseScrollEvent = require('./Interaction/MouseScrollEvent');\r\n\r\n\r\n/**\r\n * An UI Container object with expandMask hidden and possibility to enable scrolling\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param [options.scrollX=false] {Boolean} Enable horizontal scrolling\r\n * @param [options.scrollY=false] {Boolean} Enable vertical scrolling\r\n * @param [options.dragScrolling=true] {Boolean} Enable mousedrag scrolling\r\n * @param [options.softness=0.5] {Number} (0-1) softness of scrolling\r\n * @param [options.width=0] {Number|String} container width \r\n * @param [options.height=0] {Number} container height \r\n * @param [options.radius=0] {Number} corner radius of clipping mask\r\n * @param [options.expandMask=0] {Number} mask expand (px)\r\n * @param [options.overflowY=0] {Number} how much can be scrolled past content dimensions\r\n * @param [options.overflowX=0] {Number} how much can be scrolled past content dimensions\r\n */\r\nfunction ScrollingContainer(options) {\r\n options = options || {};\r\n Container.call(this, options.width, options.height);\r\n this.mask = new PIXI.Graphics();\r\n this.innerContainer = new PIXI.Container();\r\n this.innerBounds = new PIXI.Rectangle();\r\n this.container.addChild(this.mask);\r\n this.container.addChild(this.innerContainer);\r\n this.container.mask = this.mask;\r\n this.scrollX = options.scrollX !== undefined ? options.scrollX : false;\r\n this.scrollY = options.scrollY !== undefined ? options.scrollY : true;\r\n this.dragScrolling = options.dragScrolling !== undefined ? options.dragScrolling : true;\r\n this.softness = options.softness !== undefined ? Math.max(Math.min(options.softness || 0, 1), 0) : 0.5;\r\n this.radius = options.radius || 0;\r\n this.expandMask = options.expandMask || 0;\r\n this.overflowY = options.overflowY || 0;\r\n this.overflowX = options.overflowX || 0;\r\n\r\n this.animating = false;\r\n this.scrolling = false;\r\n this._scrollBars = [];\r\n\r\n this.boundCached = performance.now() - 1000;\r\n}\r\n\r\n\r\nScrollingContainer.prototype = Object.create(Container.prototype);\r\nScrollingContainer.prototype.constructor = ScrollingContainer;\r\nmodule.exports = ScrollingContainer;\r\n\r\n\r\nScrollingContainer.prototype.initialize = function () {\r\n Container.prototype.initialize.apply(this);\r\n if (this.scrollX || this.scrollY) {\r\n this.initScrolling();\r\n }\r\n};\r\n\r\nScrollingContainer.prototype.update = function () {\r\n Container.prototype.update.apply(this);\r\n if (this._lastWidth != this._width || this._lastHeight != this._height) {\r\n var of = this.expandMask;\r\n this.mask.clear();\r\n this.mask.lineStyle(0);\r\n this.mask.beginFill(0xFFFFFF, 1);\r\n if (this.radius === 0) {\r\n\r\n //this.mask.drawRect(0, 0, this._width, this._height);\r\n //this.mask.drawRect(-of, -of, this._width + of, this.height + of);\r\n //this.mask.moveTo(-of, -of);\r\n //this.mask.lineTo(this._width + of, -of);\r\n //this.mask.lineTo(this._width + of, this._height + of);\r\n //this.mask.lineTo(-of, this._height + of);\r\n this.mask.drawRect(-of, -of, this._width + of, this._height + of);\r\n }\r\n else {\r\n this.mask.drawRoundedRect(-of, -of, this._width + of, this.height + of, this.radius);\r\n }\r\n this.mask.endFill();\r\n this._lastWidth = this._width;\r\n this._lastHeight = this._height;\r\n }\r\n\r\n\r\n if (this.setScrollPosition) {\r\n this.setScrollPosition();\r\n }\r\n};\r\n\r\nScrollingContainer.prototype.addChild = function (UIObject) {\r\n var argumentsLength = arguments.length;\r\n if (argumentsLength > 1) {\r\n for (var i = 0; i < argumentsLength; i++) {\r\n this.addChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n Container.prototype.addChild.call(this, UIObject);\r\n this.innerContainer.addChild(UIObject.container);\r\n this.getInnerBounds(true); //make sure bounds is updated instantly when a child is added\r\n }\r\n return UIObject;\r\n};\r\n\r\n\r\nScrollingContainer.prototype.updateScrollBars = function () {\r\n for (var i = 0; i < this._scrollBars.length; i++) {\r\n this._scrollBars[i].alignToContainer();\r\n }\r\n};\r\n\r\n\r\nScrollingContainer.prototype.getInnerBounds = function (force) {\r\n //this is a temporary fix, because we cant rely on innercontainer height if the children is positioned > 0 y.\r\n if (force || performance.now() - this.boundCached > 1000) {\r\n this.innerContainer.getLocalBounds(this.innerBounds);\r\n this.innerContainer.getLocalBounds(this.innerBounds);\r\n this.innerBounds.height = this.innerBounds.y + this.innerContainer.height;\r\n this.innerBounds.width = this.innerBounds.x + this.innerContainer.width;\r\n this.boundCached = performance.now();\r\n }\r\n\r\n return this.innerBounds;\r\n};\r\n\r\nScrollingContainer.prototype.initScrolling = function () {\r\n var container = this.innerContainer,\r\n containerStart = new PIXI.Point(),\r\n targetPosition = new PIXI.Point(),\r\n lastPosition = new PIXI.Point(),\r\n Position = new PIXI.Point(),\r\n Speed = new PIXI.Point(),\r\n stop,\r\n self = this;\r\n\r\n this.forcePctPosition = function (direction, pct) {\r\n var bounds = this.getInnerBounds();\r\n\r\n if (this.scrollX && direction == \"x\") {\r\n container.position[direction] = -((bounds.width - this._width) * pct);\r\n }\r\n if (this.scrollY && direction == \"y\") {\r\n container.position[direction] = -((bounds.height - this._height) * pct);\r\n }\r\n Position[direction] = targetPosition[direction] = container.position[direction];\r\n };\r\n\r\n this.focusPosition = function (pos) {\r\n var bounds = this.getInnerBounds();\r\n\r\n var dif;\r\n if (this.scrollX) {\r\n var x = Math.max(0, (Math.min(bounds.width, pos.x)));\r\n if (x + container.x > this._width) {\r\n dif = x - this._width;\r\n container.x = -dif;\r\n }\r\n else if (x + container.x < 0) {\r\n dif = x + container.x;\r\n container.x -= dif;\r\n }\r\n }\r\n\r\n if (this.scrollY) {\r\n var y = Math.max(0, (Math.min(bounds.height, pos.y)));\r\n\r\n if (y + container.y > this._height) {\r\n dif = y - this._height;\r\n container.y = -dif;\r\n }\r\n else if (y + container.y < 0) {\r\n dif = y + container.y;\r\n container.y -= dif;\r\n }\r\n }\r\n\r\n lastPosition.copy(container.position);\r\n targetPosition.copy(container.position);\r\n Position.copy(container.position);\r\n this.updateScrollBars();\r\n\r\n };\r\n\r\n this.setScrollPosition = function (speed) {\r\n if (speed) {\r\n Speed = speed;\r\n }\r\n\r\n if (!this.animating) {\r\n this.animating = true;\r\n lastPosition.copy(container.position);\r\n targetPosition.copy(container.position);\r\n Ticker.on(\"update\", this.updateScrollPosition, this);\r\n }\r\n };\r\n\r\n this.updateScrollPosition = function (delta) {\r\n stop = true;\r\n if (this.scrollX) this.updateDirection(\"x\", delta);\r\n if (this.scrollY) this.updateDirection(\"y\", delta);\r\n if (stop) {\r\n Ticker.removeListener(\"update\", this.updateScrollPosition);\r\n this.animating = false;\r\n }\r\n };\r\n\r\n\r\n\r\n this.updateDirection = function (direction, delta) {\r\n var bounds = this.getInnerBounds();\r\n\r\n var min;\r\n if (direction == \"y\")\r\n min = Math.round(Math.min(0, this._height - bounds.height));\r\n else\r\n min = Math.round(Math.min(0, this._width - bounds.width));\r\n\r\n if (!this.scrolling && Math.round(Speed[direction]) !== 0) {\r\n targetPosition[direction] += Speed[direction];\r\n Speed[direction] = MathHelper.Lerp(Speed[direction], 0, (5 + 2.5 / Math.max(this.softness, 0.01)) * delta);\r\n\r\n if (targetPosition[direction] > 0) {\r\n targetPosition[direction] = 0;\r\n\r\n }\r\n else if (targetPosition[direction] < min) {\r\n targetPosition[direction] = min;\r\n\r\n }\r\n }\r\n\r\n if (!this.scrolling && Math.round(Speed[direction]) === 0 && (container[direction] > 0 || container[direction] < min)) {\r\n var target = Position[direction] > 0 ? 0 : min;\r\n Position[direction] = MathHelper.Lerp(Position[direction], target, (40 - (30 * this.softness)) * delta);\r\n stop = false;\r\n }\r\n else if (this.scrolling || Math.round(Speed[direction]) !== 0) {\r\n\r\n if (this.scrolling) {\r\n Speed[direction] = Position[direction] - lastPosition[direction];\r\n lastPosition.copy(Position);\r\n }\r\n if (targetPosition[direction] > 0) {\r\n Speed[direction] = 0;\r\n Position[direction] = 100 * this.softness * (1 - Math.exp(targetPosition[direction] / -200));\r\n }\r\n else if (targetPosition[direction] < min) {\r\n Speed[direction] = 0;\r\n Position[direction] = min - (100 * this.softness * (1 - Math.exp((min - targetPosition[direction]) / -200)));\r\n }\r\n else {\r\n Position[direction] = targetPosition[direction];\r\n }\r\n stop = false;\r\n }\r\n\r\n container.position[direction] = Math.round(Position[direction]);\r\n\r\n self.updateScrollBars();\r\n\r\n };\r\n\r\n\r\n //Drag scroll\r\n if (this.dragScrolling) {\r\n var drag = new DragEvent(this);\r\n drag.onDragStart = function (e) {\r\n if (!this.scrolling) {\r\n containerStart.copy(container.position);\r\n Position.copy(container.position);\r\n this.scrolling = true;\r\n this.setScrollPosition();\r\n }\r\n };\r\n\r\n drag.onDragMove = function (e, offset) {\r\n if (this.scrollX)\r\n targetPosition.x = containerStart.x + offset.x;\r\n if (this.scrollY)\r\n targetPosition.y = containerStart.y + offset.y;\r\n };\r\n\r\n drag.onDragEnd = function (e) {\r\n this.scrolling = false;\r\n };\r\n }\r\n\r\n //Mouse scroll\r\n var scrollSpeed = new PIXI.Point();\r\n var scroll = new MouseScrollEvent(this, true);\r\n scroll.onMouseScroll = function (e, delta) {\r\n scrollSpeed.set(-delta.x * 0.2, -delta.y * 0.2);\r\n this.setScrollPosition(scrollSpeed);\r\n };\r\n\r\n\r\n self.updateScrollBars();\r\n\r\n\r\n};\r\n\r\n\r\n\r\n\r\n","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * A sliced sprite with dynamic width and height.\r\n *\r\n * @class\r\n * @memberof PIXI.UI\r\n * @param Texture {PIXI.Texture} the texture for this SliceSprite\r\n * @param BorderWidth {Number} Width of the sprite borders\r\n * @param horizontalSlice {Boolean} Slice the sprite horizontically\r\n * @param verticalSlice {Boolean} Slice the sprite vertically\r\n * @param [tile=false] {Boolean} tile or streach\r\n */\r\nfunction SliceSprite(texture, borderWidth, horizontalSlice, verticalSlice, tile) {\r\n UIBase.call(this, texture.width, texture.height);\r\n\r\n var ftl, ftr, fbl, fbr, ft, fb, fl, fr, ff, stl, str, sbl, sbr, st, sb, sl, sr, sf,\r\n bw = borderWidth || 5,\r\n vs = typeof verticalSlice !== \"undefined\" ? verticalSlice : true,\r\n hs = typeof horizontalSlice !== \"undefined\" ? horizontalSlice : true,\r\n t = texture.baseTexture,\r\n f = texture.frame;\r\n\r\n\r\n if (hs) this.setting.minWidth = borderWidth * 2;\r\n if (vs) this.setting.minHeight = borderWidth * 2;\r\n\r\n this.initialize = function () {\r\n UIBase.prototype.initialize.apply(this);\r\n\r\n //get frames\r\n if (vs && hs) {\r\n ftl = new PIXI.Rectangle(f.x, f.y, bw, bw);\r\n ftr = new PIXI.Rectangle(f.x + f.width - bw, f.y, bw, bw);\r\n fbl = new PIXI.Rectangle(f.x, f.y + f.height - bw, bw, bw);\r\n fbr = new PIXI.Rectangle(f.x + f.width - bw, f.y + f.height - bw, bw, bw);\r\n ft = new PIXI.Rectangle(f.x + bw, f.y, f.width - bw * 2, bw);\r\n fb = new PIXI.Rectangle(f.x + bw, f.y + f.height - bw, f.width - bw * 2, bw);\r\n fl = new PIXI.Rectangle(f.x, f.y + bw, bw, f.height - bw * 2);\r\n fr = new PIXI.Rectangle(f.x + f.width - bw, f.y + bw, bw, f.height - bw * 2);\r\n ff = new PIXI.Rectangle(f.x + bw, f.y + bw, f.width - bw * 2, f.height - bw * 2);\r\n }\r\n else if (hs) {\r\n fl = new PIXI.Rectangle(f.x, f.y, bw, f.height);\r\n fr = new PIXI.Rectangle(f.x + f.width - bw, f.y, bw, f.height);\r\n ff = new PIXI.Rectangle(f.x + bw, f.y, f.width - bw * 2, f.height);\r\n }\r\n else { //vs\r\n ft = new PIXI.Rectangle(f.x, f.y, f.width, bw);\r\n fb = new PIXI.Rectangle(f.x, f.y + f.height - bw, f.width, bw);\r\n ff = new PIXI.Rectangle(f.x, f.y + bw, f.width, f.height - bw * 2);\r\n }\r\n\r\n //TODO: swap frames if rotation\r\n\r\n\r\n\r\n //make sprites\r\n sf = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, ff)) : new PIXI.Sprite(new PIXI.Texture(t, ff));\r\n this.container.addChildAt(sf, 0);\r\n if (vs && hs) {\r\n stl = new PIXI.Sprite(new PIXI.Texture(t, ftl));\r\n str = new PIXI.Sprite(new PIXI.Texture(t, ftr));\r\n sbl = new PIXI.Sprite(new PIXI.Texture(t, fbl));\r\n sbr = new PIXI.Sprite(new PIXI.Texture(t, fbr));\r\n this.container.addChildAt(stl, 0);\r\n this.container.addChildAt(str, 0);\r\n this.container.addChildAt(sbl, 0);\r\n this.container.addChildAt(sbr, 0);\r\n\r\n }\r\n if (hs) {\r\n sl = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, fl)) : new PIXI.Sprite(new PIXI.Texture(t, fl));\r\n sr = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, fr)) : new PIXI.Sprite(new PIXI.Texture(t, fr));\r\n this.container.addChildAt(sl, 0);\r\n this.container.addChildAt(sr, 0);\r\n }\r\n if (vs) {\r\n st = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, ft)) : new PIXI.Sprite(new PIXI.Texture(t, ft));\r\n sb = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, fb)) : new PIXI.Sprite(new PIXI.Texture(t, fb));\r\n this.container.addChildAt(st, 0);\r\n this.container.addChildAt(sb, 0);\r\n }\r\n\r\n //set constant position and sizes\r\n if (vs && hs) st.x = sb.x = sl.y = sr.y = stl.width = str.width = sbl.width = sbr.width = stl.height = str.height = sbl.height = sbr.height = bw;\r\n if (hs) sf.x = sl.width = sr.width = bw;\r\n if (vs) sf.y = st.height = sb.height = bw;\r\n };\r\n\r\n /**\r\n * Updates the sliced sprites position and size\r\n *\r\n * @private\r\n */\r\n this.update = function () {\r\n if (!this.initialized) return;\r\n if (vs && hs) {\r\n str.x = sbr.x = sr.x = this._width - bw;\r\n sbl.y = sbr.y = sb.y = this._height - bw;\r\n sf.width = st.width = sb.width = this._width - bw * 2;\r\n sf.height = sl.height = sr.height = this._height - bw * 2;\r\n }\r\n else if (hs) {\r\n sr.x = this._width - bw;\r\n sl.height = sr.height = sf.height = this._height;\r\n sf.width = this._width - bw * 2;\r\n }\r\n else { //vs\r\n sb.y = this._height - bw;\r\n st.width = sb.width = sf.width = this._width;\r\n sf.height = this._height - bw * 2;\r\n }\r\n\r\n if (this.tint !== null) {\r\n sf.tint = this.tint;\r\n if (vs && hs) stl.tint = str.tint = sbl.tint = sbr.tint = this.tint;\r\n if (hs) sl.tint = sr.tint = this.tint;\r\n if (vs) st.tint = sb.tint = this.tint;\r\n }\r\n\r\n if (this.blendMode !== null) {\r\n sf.blendMode = this.blendMode;\r\n if (vs && hs) stl.blendMode = str.blendMode = sbl.blendMode = sbr.blendMode = this.blendMode;\r\n if (hs) sl.blendMode = sr.blendMode = this.blendMode;\r\n if (vs) st.blendMode = sb.blendMode = this.blendMode;\r\n }\r\n };\r\n}\r\n\r\nSliceSprite.prototype = Object.create(UIBase.prototype);\r\nSliceSprite.prototype.constructor = SliceSprite;\r\nmodule.exports = SliceSprite;\r\n\r\n\r\n\r\n","var UIBase = require('./UIBase'),\r\n DragEvent = require('./Interaction/DragEvent'),\r\n ClickEvent = require('./Interaction/ClickEvent'),\r\n Tween = require('./Tween'),\r\n Ease = require('./Ease/Ease'),\r\n MathHelper = require('./MathHelper');\r\n\r\n/**\r\n* An UI Slider, the default width/height is 90%\r\n* \r\n* @class\r\n* @extends UIBase\r\n* @memberof PIXI.UI\r\n* @param options {Object} Slider settings\r\n* @param options.track {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} Any type of UIOBject, will be used for the slider track\r\n* @param options.handle {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as slider handle\r\n* @param [options.fill=null] {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used for slider fill\r\n* @param [options.vertical=false] {boolean} Direction of the slider\r\n* @param [options.value=0] {number} value of the slider\r\n* @param [options.minValue=0] {number} minimum value\r\n* @param [options.maxValue=100] {number} max value\r\n* @param [options.decimals=0] {boolean} the decimal precision (use negative to round tens and hundreds)\r\n* @param [options.onValueChange=null] {callback} Callback when the value has changed\r\n* @param [options.onValueChanging=null] {callback} Callback while the value is changing\r\n* \r\n* \r\n*/\r\nfunction Slider(options) {\r\n UIBase.call(this);\r\n this._amt = 0;\r\n this._disabled = false;\r\n\r\n //set options\r\n this.track = options.track;\r\n this.handle = options.handle;\r\n this.fill = options.fill || null;\r\n this._minValue = options.minValue || 0;\r\n this._maxValue = options.maxValue || 100;\r\n this.decimals = options.decimals || 0;\r\n this.vertical = options.vertical || false;\r\n this._onValueChange = options.onValueChange || null;\r\n this._onValueChanging = options.onValueChanging || null;\r\n this.value = options.value || 50;\r\n this.handle.pivot = 0.5;\r\n\r\n\r\n\r\n this.addChild(this.track);\r\n if (this.fill) this.track.addChild(this.fill);\r\n this.addChild(this.handle);\r\n this.handle.container.buttonMode = true;\r\n\r\n if (this.vertical) {\r\n this.height = \"100%\";\r\n this.width = this.track.width;\r\n this.track.height = \"100%\";\r\n this.handle.horizontalAlign = \"center\";\r\n if (this.fill) this.fill.horizontalAlign = \"center\";\r\n }\r\n else {\r\n this.width = \"100%\";\r\n this.height = this.track.height;\r\n this.track.width = \"100%\";\r\n this.handle.verticalAlign = \"middle\";\r\n if (this.fill) this.fill.verticalAlign = \"middle\";\r\n }\r\n\r\n}\r\n\r\nSlider.prototype = Object.create(UIBase.prototype);\r\nSlider.prototype.constructor = Slider;\r\nmodule.exports = Slider;\r\n\r\nSlider.prototype.update = function (soft) {\r\n var handleSize, val;\r\n\r\n if (this.vertical) {\r\n handleSize = this.handle._height || this.handle.container.height;\r\n val = ((this._height - handleSize) * this._amt) + (handleSize * 0.5);\r\n if (soft) {\r\n Tween.to(this.handle, 0.3, { top: val }, Ease.Power2.easeOut);\r\n if (this.fill) Tween.to(this.fill, 0.3, { height: val }, Ease.Power2.easeOut);\r\n }\r\n else {\r\n Tween.set(this.handle, { top: val });\r\n if (this.fill) Tween.set(this.fill, { height: val });\r\n }\r\n }\r\n else {\r\n handleSize = this.handle._width || this.handle.container.width;\r\n val = ((this._width - handleSize) * this._amt) + (handleSize * 0.5);\r\n if (soft) {\r\n Tween.to(this.handle, 0.3, { left: val }, Ease.Power2.easeOut);\r\n if (this.fill) Tween.to(this.fill, 0.3, { width: val }, Ease.Power2.easeOut);\r\n }\r\n else {\r\n Tween.set(this.handle, { left: val });\r\n if (this.fill) Tween.set(this.fill, { width: val });\r\n }\r\n }\r\n};\r\n\r\nSlider.prototype.initialize = function () {\r\n UIBase.prototype.initialize.call(this);\r\n\r\n\r\n\r\n var self = this;\r\n var startValue = 0;\r\n\r\n\r\n\r\n ////Handle dragging\r\n var handleDrag = new DragEvent(this.handle);\r\n handleDrag.onPress = function (event, isPressed) {\r\n event.stopPropagation();\r\n };\r\n\r\n handleDrag.onDragStart = function (event) {\r\n startValue = self._amt;\r\n maxPosition = self.vertical ? self._height - self.handle._height : self._width - self.handle._width;\r\n };\r\n\r\n handleDrag.onDragMove = function (event, offset) {\r\n\r\n self._amt = !maxPosition ? 0 : Math.max(0, Math.min(1, startValue + ((self.vertical ? offset.y : offset.x) / maxPosition)));\r\n\r\n triggerValueChanging();\r\n self.update();\r\n };\r\n\r\n handleDrag.onDragEnd = function () {\r\n triggerValueChange();\r\n self.update();\r\n };\r\n\r\n //Bar pressing/dragging\r\n var localMousePosition = new PIXI.Point();\r\n var trackDrag = new DragEvent(this.track);\r\n\r\n trackDrag.onPress = function (event, isPressed) {\r\n if (isPressed)\r\n updatePositionToMouse(event.data.global, true);\r\n event.stopPropagation();\r\n };\r\n\r\n trackDrag.onDragMove = function (event) {\r\n updatePositionToMouse(event.data.global, false);\r\n };\r\n\r\n trackDrag.onDragEnd = function () {\r\n triggerValueChange();\r\n };\r\n\r\n var updatePositionToMouse = function (mousePosition, soft) {\r\n self.track.container.toLocal(mousePosition, null, localMousePosition, true);\r\n\r\n var newPos = self.vertical ? localMousePosition.y - self.handle._height * 0.5 : localMousePosition.x - self.handle._width * 0.5;\r\n var maxPos = self.vertical ? self._height - self.handle._height : self._width - self.handle._width;\r\n self._amt = !maxPos ? 0 : Math.max(0, Math.min(1, newPos / maxPos));\r\n self.update(soft);\r\n triggerValueChanging();\r\n };\r\n\r\n var triggerValueChange = function () {\r\n self.emit(\"change\", self.value);\r\n if (self._lastChange != self.value) {\r\n self._lastChange = self.value;\r\n if (typeof self.onValueChange === \"function\")\r\n self.onValueChange(self.value);\r\n }\r\n };\r\n\r\n var triggerValueChanging = function () {\r\n self.emit(\"changeing\", self.value);\r\n if (self._lastChanging != self.value) {\r\n self._lastChanging = self.value;\r\n if (typeof self._onValueChanging === \"function\")\r\n self._onValueChanging(self.value);\r\n }\r\n };\r\n};\r\n\r\n\r\nObject.defineProperties(Slider.prototype, {\r\n value: {\r\n get: function () {\r\n return MathHelper.Round(MathHelper.Lerp(this._minValue, this._maxValue, this._amt), this.decimals);\r\n },\r\n set: function (val) {\r\n this._amt = (Math.max(this._minValue, Math.min(this._maxValue, val)) - this._minValue) / (this._maxValue - this._minValue);\r\n if (typeof this.onValueChange === \"function\")\r\n self.onValueChange(this.value);\r\n if (typeof this._onValueChanging === \"function\")\r\n this._onValueChanging(this.value);\r\n this.update();\r\n }\r\n },\r\n\r\n onValueChange: {\r\n get: function () {\r\n return this._onValueChange;\r\n },\r\n set: function (val) {\r\n this._onValueChange = val;\r\n }\r\n },\r\n onValueChanging: {\r\n get: function () {\r\n return this._onValueChanging;\r\n },\r\n set: function (val) {\r\n this._onValueChanging = val;\r\n }\r\n },\r\n minValue: {\r\n get: function () {\r\n return this._minValue;\r\n },\r\n set: function (val) {\r\n this._minValue = val;\r\n this.update();\r\n }\r\n },\r\n maxValue: {\r\n get: function () {\r\n return this._maxValue;\r\n },\r\n set: function (val) {\r\n this._maxValue = val;\r\n this.update();\r\n }\r\n },\r\n disabled: {\r\n get: function () {\r\n return this._disabled;\r\n },\r\n set: function (val) {\r\n if (val !== this._disabled) {\r\n this._disabled = val;\r\n this.handle.container.buttonMode = !val;\r\n this.handle.container.interactive = !val;\r\n this.track.container.interactive = !val;\r\n }\r\n }\r\n }\r\n});","var Container = require('./Container');\r\nvar Tween = require('./Tween');\r\n/**\r\n * An UI Container object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param desc {Boolean} Sort the list descending\r\n * @param tweenTime {Number} if above 0 the sort will be animated\r\n * @param tweenEase {PIXI.UI.Ease} ease method used for animation\r\n */\r\nfunction SortableList(desc, tweenTime, tweenEase) {\r\n Container.call(this);\r\n this.desc = typeof desc !== \"undefined\" ? desc : false;\r\n this.tweenTime = tweenTime || 0;\r\n this.tweenEase = tweenEase;\r\n this.items = [];\r\n\r\n}\r\n\r\nSortableList.prototype = Object.create(Container.prototype);\r\nSortableList.prototype.constructor = SortableList;\r\nmodule.exports = SortableList;\r\n\r\nSortableList.prototype.addChild = function (UIObject, fnValue, fnThenBy) {\r\n Container.prototype.addChild.call(this, UIObject);\r\n if (this.items.indexOf(UIObject) == -1) {\r\n this.items.push(UIObject);\r\n }\r\n\r\n if (typeof fnValue === \"function\")\r\n UIObject._sortListValue = fnValue;\r\n\r\n if (typeof fnThenBy === \"function\")\r\n UIObject._sortListThenByValue = fnThenBy;\r\n\r\n if (!UIObject._sortListRnd)\r\n UIObject._sortListRnd = Math.random();\r\n\r\n\r\n\r\n this.sort();\r\n};\r\n\r\nSortableList.prototype.removeChild = function (UIObject) {\r\n if (arguments.length > 1) {\r\n for (var i = 0; i < arguments.length; i++) {\r\n this.removeChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n Container.prototype.removeChild.call(this, UIObject);\r\n var index = this.items.indexOf(UIObject);\r\n if (index != -1) {\r\n this.items.splice(index, 1);\r\n }\r\n this.sort();\r\n }\r\n};\r\n\r\nSortableList.prototype.sort = function (instant) {\r\n clearTimeout(this._sortTimeout);\r\n\r\n if (instant) {\r\n this._sort();\r\n return;\r\n }\r\n\r\n var _this = this;\r\n this._sortTimeout = setTimeout(function () { _this._sort(); }, 0);\r\n};\r\n\r\nSortableList.prototype._sort = function () {\r\n var self = this,\r\n desc = this.desc,\r\n y = 0,\r\n alt = true;\r\n\r\n this.items.sort(function (a, b) {\r\n var res = a._sortListValue() < b._sortListValue() ? desc ? 1 : -1 :\r\n a._sortListValue() > b._sortListValue() ? desc ? -1 : 1 : 0;\r\n\r\n if (res === 0 && a._sortListThenByValue && b._sortListThenByValue) {\r\n res = a._sortListThenByValue() < b._sortListThenByValue() ? desc ? 1 : -1 :\r\n a._sortListThenByValue() > b._sortListThenByValue() ? desc ? -1 : 1 : 0;\r\n }\r\n if (res === 0) {\r\n res = a._sortListRnd > b._sortListRnd ? 1 :\r\n a._sortListRnd < b._sortListRnd ? -1 : 0;\r\n }\r\n return res;\r\n });\r\n\r\n for (var i = 0; i < this.items.length; i++) {\r\n var item = this.items[i];\r\n\r\n alt = !alt;\r\n\r\n if (this.tweenTime > 0) {\r\n Tween.fromTo(item, this.tweenTime, { x: item.x, y: item.y }, { x: 0, y: y }, this.tweenEase);\r\n }\r\n else {\r\n item.x = 0;\r\n item.y = y;\r\n }\r\n y += item.height;\r\n if (typeof item.altering === \"function\")\r\n item.altering(alt);\r\n }\r\n\r\n //force it to update parents when sort animation is done (prevent scrolling container bug)\r\n if (this.tweenTime > 0) {\r\n setTimeout(function () {\r\n self.updatesettings(false, true);\r\n }, this.tweenTime * 1000);\r\n }\r\n};\r\n\r\n\r\n","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * An UI sprite object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param Texture {PIXI.Texture} The texture for the sprite\r\n */\r\nfunction Sprite(t) {\r\n this.sprite = new PIXI.Sprite(t);\r\n UIBase.call(this, this.sprite.width, this.sprite.height);\r\n this.container.addChild(this.sprite);\r\n}\r\n\r\nSprite.prototype = Object.create(UIBase.prototype);\r\nSprite.prototype.constructor = Sprite;\r\nmodule.exports = Sprite;\r\n\r\n\r\nSprite.fromFrame = function (frameId) {\r\n return new Sprite(new PIXI.Texture.fromFrame(frameId));\r\n};\r\n\r\nSprite.fromImage = function (imageUrl) {\r\n return new Sprite(new PIXI.Texture.fromImage(imageUrl));\r\n};\r\n\r\n/**\r\n * Updates the text\r\n *\r\n * @private\r\n */\r\nSprite.prototype.update = function () {\r\n if (this.tint !== null)\r\n this.sprite.tint = this.tint;\r\n\r\n if (this.blendMode !== null)\r\n this.sprite.blendMode = this.blendMode;\r\n\r\n this.sprite.width = this._width;\r\n this.sprite.height = this._height;\r\n};\r\n\r\n","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * A Stage for UIObjects\r\n *\r\n * @class\r\n * @extends PIXI.UI.Container\r\n * @memberof PIXI.UI\r\n * @param width {Number} Width of the Stage\r\n * @param height {Number} Height of the Stage\r\n */\r\nfunction Stage(width, height) {\r\n PIXI.Container.call(this);\r\n this.__width = width;\r\n this.__height = height;\r\n this.minWidth = 0;\r\n this.minHeight = 0;\r\n\r\n this.UIChildren = [];\r\n this.stage = this;\r\n this.interactive = true;\r\n this.hitArea = new PIXI.Rectangle(0, 0, 0, 0);\r\n this.initialized = true;\r\n}\r\n\r\nStage.prototype = Object.create(PIXI.Container.prototype);\r\nStage.prototype.constructor = Stage;\r\nmodule.exports = Stage;\r\n\r\nStage.prototype.addChild = function (UIObject) {\r\n var argumentLenght = arguments.length;\r\n if (argumentLenght > 1) {\r\n for (var i = 0; i < argumentLenght; i++) {\r\n this.addChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n if (UIObject.parent !== null)\r\n UIObject.parent.removeChild(UIObject);\r\n\r\n UIObject.parent = this;\r\n this.UIChildren.push(UIObject);\r\n PIXI.Container.prototype.addChild.call(this, UIObject.container);\r\n UIObject.updatesettings(true);\r\n }\r\n};\r\n\r\nStage.prototype.removeChild = function (UIObject) {\r\n var argumentLenght = arguments.length;\r\n if (argumentLenght > 1) {\r\n for (var i = 0; i < argumentLenght; i++) {\r\n this.removeChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n PIXI.Container.prototype.removeChild.call(this, UIObject.container);\r\n var index = this.UIChildren.indexOf(UIObject);\r\n if (index != -1) {\r\n this.UIChildren.splice(index, 1);\r\n UIObject.parent = null;\r\n }\r\n\r\n }\r\n};\r\n\r\nStage.prototype.resize = function (width, height) {\r\n if (!isNaN(height)) this.__height = height;\r\n if (!isNaN(width)) this.__width = width;\r\n\r\n if (this.minWidth || this.minHeight) {\r\n var rx = 1,\r\n ry = 1;\r\n\r\n if (width && width < this.minWidth) {\r\n rx = this.minWidth / width;\r\n }\r\n\r\n if (height && height < this.minHeight) {\r\n ry = this.minHeight / height;\r\n }\r\n\r\n if (rx > ry && rx > 1) {\r\n this.scale.set(1 / rx);\r\n this.__height *= rx;\r\n this.__width *= rx;\r\n }\r\n else if (ry > 1) {\r\n this.scale.set(1 / ry);\r\n this.__width *= ry;\r\n this.__height *= ry;\r\n }\r\n else if (this.scale.x !== 1) {\r\n this.scale.set(1);\r\n }\r\n }\r\n\r\n this.hitArea.width = this.__width;\r\n this.hitArea.height = this.__height;\r\n\r\n for (var i = 0; i < this.UIChildren.length; i++)\r\n this.UIChildren[i].updatesettings(true, false);\r\n};\r\n\r\nObject.defineProperties(Stage.prototype, {\r\n _width: {\r\n get: function () {\r\n return this.__width;\r\n },\r\n set: function (val) {\r\n if (!isNaN(val)) {\r\n this.__width = val;\r\n this.resize();\r\n }\r\n }\r\n },\r\n _height: {\r\n get: function () {\r\n return this.__height;\r\n },\r\n set: function (val) {\r\n if (!isNaN(val)) {\r\n this.__height = val;\r\n this.resize();\r\n }\r\n }\r\n }\r\n});","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * An UI text object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param Text {String} Text content\r\n * @param TextStyle {PIXI.TextStyle} Style used for the Text\r\n */\r\nfunction Text(text, PIXITextStyle) {\r\n this._text = new PIXI.Text(text, PIXITextStyle);\r\n UIBase.call(this, this._text.width, this._text.height);\r\n this.container.addChild(this._text);\r\n\r\n this.baseupdate = function () {\r\n //force original text width unless using anchors\r\n if (this._anchorLeft === null || this._anchorRight === null) {\r\n this.setting.width = this._text.width;\r\n this.setting.widthPct = null;\r\n }\r\n else {\r\n this._text.width = this._width;\r\n }\r\n\r\n //force original text height unless using anchors\r\n if (this._anchorTop === null || this._anchorBottom === null) {\r\n this.setting.height = this._text.height;\r\n this.setting.heightPct = null;\r\n }\r\n else {\r\n this._text.width = this._width;\r\n }\r\n\r\n\r\n UIBase.prototype.baseupdate.call(this);\r\n };\r\n\r\n this.update = function () {\r\n //set tint\r\n if (this.tint !== null)\r\n this._text.tint = this.tint;\r\n\r\n //set blendmode\r\n if (this.blendMode !== null)\r\n this._text.blendMode = this.blendMode;\r\n };\r\n}\r\n\r\nText.prototype = Object.create(UIBase.prototype);\r\nText.prototype.constructor = Text;\r\nmodule.exports = Text;\r\n\r\n\r\nObject.defineProperties(Text.prototype, {\r\n value: {\r\n get: function () {\r\n return this._text.text;\r\n },\r\n set: function (val) {\r\n this._text.text = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n text: {\r\n get: function () {\r\n return this.value;\r\n },\r\n set: function (val) {\r\n this.value = val;\r\n }\r\n }\r\n});","var InputBase = require('./InputBase'),\r\n Container = require('./Container'),\r\n DragEvent = require('./Interaction/DragEvent');\r\n\r\n/**\r\n * An UI text object\r\n *\r\n * @class\r\n * @extends PIXI.UI.InputBase\r\n * @memberof PIXI.UI\r\n * @param options.value {String} Text content\r\n * @param [options.multiLine=false] {Boolean} Multiline input\r\n * @param options.style {PIXI.TextStyle} Style used for the Text\r\n * @param options.background {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for input\r\n * @param [options.selectedColor='#ffffff'] {String|Array} Fill color of selected text\r\n * @param [options.selectedBackgroundColor='#318cfa'] {String} BackgroundColor of selected text\r\n * @param [options.width=150] {Number} width of input\r\n * @param [options.height=20] {Number} height of input\r\n * @param [options.padding=3] {Number} input padding\r\n * @param [options.paddingTop=0] {Number} input padding\r\n * @param [options.paddingBottom=0] {Number} input padding\r\n * @param [options.paddingLeft=0] {Number} input padding\r\n * @param [options.paddingRight=0] {Number} input padding\r\n * @param [options.tabIndex=0] {Number} input tab index\r\n * @param [options.tabGroup=0] {Number|String} input tab group\r\n * @param [options.maxLength=0] {Number} 0 = unlimited\r\n * @param [options.caretWidth=1] {Number} width of the caret\r\n * @param [options.lineHeight=0] {Number} 0 = inherit from text\r\n */\r\nfunction TextInput(options) {\r\n //create temp input (for mobile keyboard)\r\n if (typeof _pui_tempInput === \"undefined\") {\r\n _pui_tempInput = document.createElement(\"INPUT\");\r\n _pui_tempInput.setAttribute(\"type\", \"text\");\r\n _pui_tempInput.setAttribute(\"id\", \"_pui_tempInput\");\r\n _pui_tempInput.setAttribute(\"style\", \"position:fixed; left:-10px; top:-10px; width:0px; height: 0px;\");\r\n document.body.appendChild(_pui_tempInput);\r\n }\r\n\r\n\r\n InputBase.call(this, options.width || options.background ? options.background.width : 150, options.height || options.background ? options.background.height : 20, options.tabIndex || 0, options.tabGroup || 0);\r\n this._dirtyText = true;\r\n this.maxLength = options.maxLength || 0;\r\n this._value = this._lastValue = options.value || \"\";\r\n\r\n if (this.maxLength) this._value = this._value.slice(0, this.maxLength);\r\n\r\n var self = this;\r\n var chars = [];\r\n var multiLine = options.multiLine !== undefined ? options.multiLine : false;\r\n var color = options.style && options.style.fill ? options.style.fill : \"#000000\";\r\n var selectedColor = options.selectedColor || \"#ffffff\";\r\n var selectedBackgroundColor = options.selectedBackgroundColor || \"#318cfa\";\r\n var tempText = new PIXI.Text(\"1\", options.style);\r\n var textHeight = tempText.height;\r\n var lineHeight = options.lineHeight || textHeight || self._height;\r\n tempText.destroy();\r\n\r\n\r\n //set cursor\r\n //this.container.cursor = \"text\";\r\n\r\n //selection graphics\r\n var selection = self.selection = new PIXI.Graphics();\r\n selection.visible = false;\r\n selection._startIndex = 0;\r\n selection._endIndex = 0;\r\n\r\n //caret graphics\r\n var caret = self.caret = new PIXI.Graphics();\r\n caret.visible = false;\r\n caret._index = 0;\r\n caret.lineStyle(options.caretWidth || 1, \"#ffffff\", 1);\r\n caret.moveTo(0, 0);\r\n caret.lineTo(0, textHeight);\r\n\r\n\r\n //insert bg\r\n if (options.background) {\r\n this.background = options.background;\r\n this.background.width = \"100%\";\r\n this.background.height = \"100%\";\r\n this.addChild(this.background);\r\n }\r\n\r\n //var padding\r\n var paddingLeft = options.paddingLeft !== undefined ? options.paddingLeft : options.padding !== undefined ? options.padding : 3;\r\n var paddingRight = options.paddingRight !== undefined ? options.paddingRight : options.padding !== undefined ? options.padding : 3;\r\n var paddingBottom = options.paddingBottom !== undefined ? options.paddingBottom : options.padding !== undefined ? options.padding : 3;\r\n var paddingTop = options.paddingTop !== undefined ? options.paddingTop : options.padding !== undefined ? options.padding : 3;\r\n\r\n //insert text container (scrolling container)\r\n var textContainer = this.textContainer = new PIXI.UI.ScrollingContainer({\r\n scrollX: !multiLine,\r\n scrollY: multiLine,\r\n dragScrolling: multiLine,\r\n expandMask: 2,\r\n softness: 0.2,\r\n overflowX: 40,\r\n overflowY: 40\r\n });\r\n textContainer.anchorTop = paddingTop;\r\n textContainer.anchorBottom = paddingBottom;\r\n textContainer.anchorLeft = paddingLeft;\r\n textContainer.anchorRight = paddingRight;\r\n this.addChild(textContainer);\r\n\r\n if (multiLine) {\r\n this._useNext = this._usePrev = false;\r\n textContainer.dragRestrictAxis = \"y\";\r\n textContainer.dragThreshold = 5;\r\n this.dragRestrictAxis = \"x\";\r\n this.dragThreshold = 5;\r\n\r\n }\r\n\r\n\r\n var innerContainer = textContainer.innerContainer;\r\n innerContainer.cacheAsBitmap = true;\r\n //textContainer.container.addChild(innerContainer);\r\n\r\n\r\n this.update = function () {\r\n if (this._width != this._lastWidth) {\r\n this._lastWidth = this._width;\r\n if (multiLine) {\r\n updateText();\r\n if (caret.visible) self.setCaretIndex(caret._index);\r\n if (hasSelection) updateSelectionGraphics();\r\n }\r\n\r\n }\r\n\r\n //update text \r\n if (this._dirtyText) {\r\n updateText();\r\n this._dirtyText = false;\r\n }\r\n };\r\n\r\n //selection Vars\r\n var caretInterval, //interval for flash\r\n si, //startIndex\r\n sie, //startIndexEnd\r\n ei, //endIndex\r\n eie, //endIndexEnd\r\n sp = new PIXI.Point(), //startposition\r\n ds = new PIXI.Point(), //dragStart\r\n de = new PIXI.Point(), //dragend\r\n rdd = false, //Reverse drag direction\r\n vrdd = false, //vertical Reverse drag direction\r\n selectionStart = -1,\r\n selectionEnd = -1,\r\n hasSelection = false,\r\n t = performance.now(), //timestamp\r\n cc = 0, //click counter\r\n textLengthPX = 0,\r\n textHeightPX = 0,\r\n lineIndexMax = 0,\r\n ctrlDown = false,\r\n shiftDown = false,\r\n shiftKey = 16,\r\n ctrlKey = 17,\r\n cmdKey = 91;\r\n\r\n\r\n\r\n var updateText = function () {\r\n textLengthPX = 0;\r\n textHeightPX = 0;\r\n lineIndexMax = 0;\r\n\r\n var lineIndex = 0,\r\n length = self._value.length,\r\n x = 0,\r\n y = (lineHeight - textHeight) * 0.5,\r\n i = 0;\r\n\r\n //destroy excess chars\r\n if (chars.length > length) {\r\n for (i = chars.length - 1; i >= length; i--) {\r\n innerContainer.removeChild(chars[i]);\r\n chars[i].destroy();\r\n }\r\n chars.splice(length, chars.length - length);\r\n }\r\n\r\n //update and add chars\r\n var whitespace = false;\r\n var newline = false;\r\n var wordIndex = 0;\r\n var lastWordIndex = -1;\r\n var wrap = false;\r\n for (i = 0; i < self._value.length; i++) {\r\n if (whitespace || newline) {\r\n lastWordIndex = i;\r\n wordIndex++;\r\n }\r\n\r\n var c = self._value[i];\r\n whitespace = c === \" \";\r\n newline = c === \"\\n\";\r\n\r\n\r\n if (newline) { //newline \"hack\". webgl render errors if \\n is passed to text\r\n c = \"\";\r\n }\r\n\r\n\r\n\r\n var charText = chars[i];\r\n if (!charText) {\r\n charText = new PIXI.Text(c, options.style);\r\n innerContainer.addChild(charText);\r\n chars.push(charText);\r\n }\r\n else {\r\n charText.text = c;\r\n }\r\n\r\n charText.scale.x = newline ? 0 : 1;\r\n charText.wrapped = wrap;\r\n wrap = false;\r\n\r\n if (newline || (multiLine && x + charText.width >= self._width - paddingLeft - paddingRight)) {\r\n lineIndex++;\r\n x = 0;\r\n y += lineHeight;\r\n\r\n if (lastWordIndex != -1 && !newline) {\r\n i = lastWordIndex - 1;\r\n lastWordIndex = -1;\r\n wrap = true;\r\n continue;\r\n }\r\n }\r\n\r\n\r\n charText.lineIndex = lineIndex;\r\n charText.x = x;\r\n charText.y = y;\r\n charText.wordIndex = whitespace || newline ? -1 : wordIndex;\r\n x += charText.width;\r\n\r\n\r\n if (x > textLengthPX)\r\n textLengthPX = x;\r\n if (y > textHeightPX)\r\n textHeightPX = y;\r\n }\r\n\r\n lineIndexMax = lineIndex;\r\n\r\n //put caret on top\r\n innerContainer.addChild(caret);\r\n\r\n //recache\r\n if (innerContainer.cacheAsBitmap) {\r\n innerContainer.cacheAsBitmap = false;\r\n innerContainer.cacheAsBitmap = true;\r\n }\r\n\r\n textContainer.update();\r\n\r\n };\r\n\r\n var updateClosestIndex = function (point, start) {\r\n var currentDistX = 99999;\r\n var currentClosest;\r\n var currentIndex = -1;\r\n var atEnd = false;\r\n\r\n var closestLineIndex = 0;\r\n if (lineIndexMax > 0)\r\n closestLineIndex = Math.max(0, Math.min(lineIndexMax, Math.floor(point.y / lineHeight)));\r\n\r\n\r\n\r\n\r\n\r\n for (var i = 0; i < chars.length; i++) {\r\n var char = chars[i];\r\n if (char.lineIndex != closestLineIndex) continue;\r\n\r\n var distX = Math.abs(point.x - (char.x + (char.width * 0.5)));\r\n if (distX < currentDistX) {\r\n currentDistX = distX;\r\n currentClosest = char;\r\n currentIndex = i;\r\n atEnd = point.x > char.x + (char.width * 0.5);\r\n }\r\n }\r\n\r\n\r\n if (start) {\r\n si = currentIndex;\r\n sie = atEnd;\r\n }\r\n else {\r\n ei = currentIndex;\r\n eie = atEnd;\r\n }\r\n };\r\n\r\n var deleteSelection = function () {\r\n if (hasSelection) {\r\n self.value = self.value.slice(0, selectionStart) + self.value.slice(selectionEnd + 1);\r\n self.setCaretIndex(selectionStart);\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n var updateSelectionColors = function () {\r\n //Color charecters\r\n for (var i = 0; i < chars.length; i++) {\r\n if (i >= selectionStart && i <= selectionEnd)\r\n chars[i].style.fill = selectedColor;\r\n else\r\n chars[i].style.fill = color;\r\n }\r\n };\r\n\r\n var _sp = new PIXI.Point();\r\n var scrollToPosition = function (pos) {\r\n _sp.copy(pos);\r\n if (multiLine && _sp.y >= lineHeight)\r\n _sp.y += lineHeight;\r\n textContainer.focusPosition(_sp);\r\n };\r\n\r\n var resetScrollPosition = function () {\r\n _sp.set(0, 0);\r\n textContainer.focusPosition(_sp);\r\n };\r\n\r\n //caret\r\n var hideCaret = function () {\r\n caret.visible = false;\r\n clearInterval(caretInterval);\r\n };\r\n\r\n var showCaret = function () {\r\n self.clearSelection();\r\n clearInterval(caretInterval);\r\n caret.alpha = 1;\r\n caret.visible = true;\r\n caretInterval = setInterval(function () {\r\n caret.alpha = caret.alpha === 0 ? 1 : 0;\r\n }, 500);\r\n\r\n };\r\n\r\n var insertTextAtCaret = function (c) {\r\n if (hasSelection)\r\n deleteSelection();\r\n if (!self.maxLength || chars.length < self.maxLength) {\r\n\r\n if (caret._atEnd) {\r\n self.value += c;\r\n self.setCaretIndex(chars.length);\r\n }\r\n else {\r\n var index = Math.min(chars.length - 1, caret._index);\r\n self.value = self.value.slice(0, index) + c + self.value.slice(index);\r\n self.setCaretIndex(index + c.length);\r\n }\r\n }\r\n };\r\n\r\n //events\r\n var keyDownEvent = function (e) {\r\n if (e.which === ctrlKey || e.which === cmdKey) ctrlDown = true;\r\n if (e.which === shiftKey) shiftDown = true;\r\n\r\n if (e.which === 13) { //enter\r\n insertTextAtCaret('\\n');\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n if (ctrlDown) {\r\n\r\n //ctrl + ?\r\n if (e.which === 65) { //ctrl + a\r\n self.select();\r\n e.preventDefault();\r\n return;\r\n }\r\n else if (e.which === 90) { //ctrl + z (undo)\r\n if (self.value != self._lastValue)\r\n self.value = self._lastValue;\r\n self.setCaretIndex(self._lastValue.length + 1);\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n }\r\n if (e.which === 8) {\r\n //backspace\r\n if (!deleteSelection()) {\r\n if (caret._index > 0 || (chars.length === 1 && caret._atEnd)) {\r\n if (caret._atEnd) {\r\n self.value = self.value.slice(0, chars.length - 1);\r\n self.setCaretIndex(caret._index);\r\n }\r\n else {\r\n self.value = self.value.slice(0, caret._index - 1) + self.value.slice(caret._index);\r\n self.setCaretIndex(caret._index - 1);\r\n }\r\n }\r\n }\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n if (e.which === 46) {\r\n //delete\r\n if (!deleteSelection()) {\r\n if (!caret._atEnd) {\r\n self.value = self.value.slice(0, caret._index) + self.value.slice(caret._index + 1);\r\n self.setCaretIndex(caret._index);\r\n }\r\n }\r\n e.preventDefault();\r\n return;\r\n }\r\n else if (e.which === 37 || e.which === 39) {\r\n rdd = e.which === 37;\r\n if (shiftDown) {\r\n if (hasSelection) {\r\n var caretAtStart = selectionStart === caret._index;\r\n if (caretAtStart) {\r\n if (selectionStart === selectionEnd && rdd === caret._forward) {\r\n self.setCaretIndex(caret._forward ? caret._index : caret._index + 1);\r\n }\r\n else {\r\n var startindex = rdd ? caret._index - 1 : caret._index + 1;\r\n self.selectRange(startindex, selectionEnd);\r\n caret._index = Math.min(chars.length - 1, Math.max(0, startindex));\r\n }\r\n }\r\n else {\r\n var endIndex = rdd ? caret._index - 1 : caret._index + 1;\r\n self.selectRange(selectionStart, endIndex);\r\n caret._index = Math.min(chars.length - 1, Math.max(0, endIndex));\r\n }\r\n }\r\n else {\r\n var _i = caret._atEnd ? caret._index + 1 : caret._index;\r\n var selectIndex = rdd ? _i - 1 : _i;\r\n self.selectRange(selectIndex, selectIndex);\r\n caret._index = selectIndex;\r\n caret._forward = !rdd;\r\n }\r\n }\r\n else {\r\n //Navigation\r\n if (hasSelection)\r\n self.setCaretIndex(rdd ? selectionStart : selectionEnd + 1);\r\n else\r\n self.setCaretIndex(caret._index + (rdd ? caret._atEnd ? 0 : -1 : 1));\r\n }\r\n e.preventDefault();\r\n return;\r\n\r\n }\r\n else if (multiLine && (e.which === 38 || e.which === 40)) {\r\n vrdd = e.which === 38;\r\n if (shiftDown) {\r\n if (hasSelection) {\r\n de.y = Math.max(0, Math.min(textHeightPX, de.y + (vrdd ? -lineHeight : lineHeight)));\r\n updateClosestIndex(de, false);\r\n console.log(si, ei);\r\n if (Math.abs(si - ei) <= 1) {\r\n console.log(si, ei);\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n } else {\r\n caret._index = (eie ? ei + 1 : ei) + (caret._down ? -1 : 0);\r\n self.selectRange(caret._down ? si : si - 1, caret._index);\r\n }\r\n\r\n }\r\n else {\r\n si = caret._index;\r\n sie = false;\r\n de.copy(caret);\r\n de.y = Math.max(0, Math.min(textHeightPX, de.y + (vrdd ? -lineHeight : lineHeight)));\r\n updateClosestIndex(de, false);\r\n caret._index = (eie ? ei + 1 : ei) - (vrdd ? 0 : 1);\r\n self.selectRange(vrdd ? si - 1 : si, caret._index);\r\n caret._down = !vrdd;\r\n }\r\n }\r\n else {\r\n if (hasSelection) {\r\n self.setCaretIndex(vrdd ? selectionStart : selectionEnd + 1);\r\n }\r\n else {\r\n ds.copy(caret);\r\n ds.y += vrdd ? -lineHeight : lineHeight;\r\n ds.x += 1;\r\n updateClosestIndex(ds, true);\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n }\r\n }\r\n e.preventDefault();\r\n return;\r\n }\r\n };\r\n\r\n var keyUpEvent = function (e) {\r\n if (e.which == ctrlKey || e.which == cmdKey) ctrlDown = false;\r\n if (e.which === shiftKey) shiftDown = false;\r\n };\r\n\r\n var copyEvent = function (e) {\r\n if (hasSelection) {\r\n var clipboardData = e.clipboardData || window.clipboardData;\r\n clipboardData.setData('Text', self.value.slice(selectionStart, selectionEnd + 1));\r\n }\r\n e.preventDefault();\r\n };\r\n\r\n var cutEvent = function (e) {\r\n if (hasSelection) {\r\n copyEvent(e);\r\n deleteSelection();\r\n }\r\n e.preventDefault();\r\n };\r\n\r\n var pasteEvent = function (e) {\r\n var clipboardData = e.clipboardData || window.clipboardData;\r\n insertTextAtCaret(clipboardData.getData('Text'));\r\n e.preventDefault();\r\n };\r\n\r\n var inputEvent = function (e) {\r\n insertTextAtCaret(e.data);\r\n e.preventDefault();\r\n };\r\n\r\n var inputBlurEvent = function (e) {\r\n self.blur();\r\n };\r\n\r\n var event = new DragEvent(this);\r\n\r\n event.onPress = function (e, mouseDown) {\r\n\r\n if (mouseDown) {\r\n var timeSinceLast = performance.now() - t;\r\n t = performance.now();\r\n if (timeSinceLast < 250) {\r\n cc++;\r\n if (cc > 1)\r\n this.select();\r\n else {\r\n innerContainer.toLocal(sp, undefined, ds, true);\r\n updateClosestIndex(ds, true);\r\n var c = chars[si];\r\n if (c) {\r\n if (c.wordIndex != -1)\r\n this.selectWord(c.wordIndex);\r\n else\r\n this.selectRange(si, si);\r\n }\r\n }\r\n }\r\n else {\r\n cc = 0;\r\n sp.copy(e.data.global);\r\n innerContainer.toLocal(sp, undefined, ds, true);\r\n if (chars.length) {\r\n updateClosestIndex(ds, true);\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n }\r\n }\r\n }\r\n e.data.originalEvent.preventDefault();\r\n };\r\n\r\n event.onDragMove = function (e, offset) {\r\n if (!chars.length || !this._focused) return;\r\n\r\n de.x = sp.x + offset.x;\r\n de.y = sp.y + offset.y;\r\n innerContainer.toLocal(de, undefined, de, true);\r\n updateClosestIndex(de, false);\r\n\r\n if (si < ei) {\r\n self.selectRange(sie ? si + 1 : si, eie ? ei : ei - 1);\r\n caret._index = eie ? ei : ei - 1;\r\n }\r\n else if (si > ei) {\r\n self.selectRange(ei, sie ? si : si - 1);\r\n caret._index = ei;\r\n }\r\n else {\r\n if (sie === eie) {\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n }\r\n else {\r\n self.selectRange(si, ei);\r\n caret._index = ei;\r\n }\r\n }\r\n\r\n caret._forward = si <= ei;\r\n caret._down = offset.y > 0;\r\n\r\n scrollToPosition(de);\r\n };\r\n\r\n\r\n\r\n\r\n //public methods\r\n this.focus = function () {\r\n if (!this._focused) {\r\n InputBase.prototype.focus.call(this);\r\n\r\n var l = this.container.worldTransform.tx + \"px\";\r\n var t = this.container.worldTransform.ty + \"px\";\r\n var h = this.container.height + \"px\";\r\n var w = this.container.width + \"px\";\r\n\r\n _pui_tempInput.setAttribute(\"style\", \"position:fixed; left:\" + l + \"; top:\" + t + \"; height:\" + h + \"; width:\" + w + \";\");\r\n _pui_tempInput.value = \"\";\r\n _pui_tempInput.focus();\r\n _pui_tempInput.setAttribute(\"style\", \"position:fixed; left:-10px; top:-10px; width:0px; height: 0px;\");\r\n\r\n innerContainer.cacheAsBitmap = false;\r\n _pui_tempInput.addEventListener(\"blur\", inputBlurEvent, false);\r\n document.addEventListener(\"keydown\", keyDownEvent, false);\r\n document.addEventListener(\"keyup\", keyUpEvent, false);\r\n document.addEventListener('paste', pasteEvent, false);\r\n document.addEventListener('copy', copyEvent, false);\r\n document.addEventListener('cut', cutEvent, false);\r\n _pui_tempInput.addEventListener('textInput', inputEvent, false);\r\n\r\n setTimeout(function () {\r\n if (!caret.visible && !self.selection.visible && !multiLine)\r\n self.setCaretIndex(chars.length);\r\n }, 0);\r\n\r\n }\r\n\r\n };\r\n\r\n this.blur = function () {\r\n if (this._focused) {\r\n InputBase.prototype.blur.call(this);\r\n ctrlDown = false;\r\n shiftDown = false;\r\n hideCaret();\r\n this.clearSelection();\r\n if (chars.length > 1) innerContainer.cacheAsBitmap = true;\r\n _pui_tempInput.removeEventListener(\"blur\", inputBlurEvent);\r\n document.removeEventListener(\"keydown\", keyDownEvent);\r\n document.removeEventListener(\"keyup\", keyUpEvent);\r\n document.removeEventListener('paste', pasteEvent);\r\n document.removeEventListener('copy', copyEvent);\r\n document.removeEventListener('cut', cutEvent);\r\n _pui_tempInput.removeEventListener('textInput', inputEvent);\r\n _pui_tempInput.blur();\r\n\r\n }\r\n\r\n if (!multiLine)\r\n resetScrollPosition();\r\n };\r\n\r\n this.setCaretIndex = function (index) {\r\n caret._atEnd = index >= chars.length;\r\n caret._index = Math.max(0, Math.min(chars.length - 1, index));\r\n\r\n if (chars.length && index > 0) {\r\n\r\n var i = Math.max(0, Math.min(index, chars.length - 1));\r\n var c = chars[i];\r\n\r\n if (c && c.wrapped) {\r\n caret.x = c.x;\r\n caret.y = c.y;\r\n }\r\n else {\r\n i = Math.max(0, Math.min(index - 1, chars.length - 1));\r\n c = chars[i];\r\n caret.x = chars[i].x + chars[i].width;\r\n caret.y = (chars[i].lineIndex * lineHeight) + (lineHeight - textHeight) * 0.5;\r\n }\r\n }\r\n else {\r\n caret.x = 0;\r\n caret.y = (lineHeight - textHeight) * 0.5;\r\n }\r\n\r\n scrollToPosition(caret);\r\n showCaret();\r\n\r\n };\r\n\r\n this.select = function () {\r\n this.selectRange(0, chars.length - 1);\r\n };\r\n\r\n this.selectWord = function (wordIndex) {\r\n var startIndex = chars.length;\r\n var endIndex = 0;\r\n for (var i = 0; i < chars.length; i++) {\r\n if (chars[i].wordIndex !== wordIndex) continue;\r\n if (i < startIndex)\r\n startIndex = i;\r\n if (i > endIndex)\r\n endIndex = i;\r\n }\r\n\r\n this.selectRange(startIndex, endIndex);\r\n };\r\n\r\n var drawSelectionRect = function (x, y, w, h) {\r\n self.selection.beginFill(\"0x\" + selectedBackgroundColor.slice(1), 1);\r\n self.selection.moveTo(x, y);\r\n self.selection.lineTo(x + w, y);\r\n self.selection.lineTo(x + w, y + h);\r\n self.selection.lineTo(x, y + h);\r\n self.selection.endFill();\r\n };\r\n\r\n var updateSelectionGraphics = function () {\r\n var c1 = chars[selectionStart];\r\n if (c1 !== undefined) {\r\n var cx = c1.x,\r\n cy = c1.y,\r\n w = 0,\r\n h = textHeight,\r\n cl = c1.lineIndex;\r\n\r\n self.selection.clear();\r\n for (var i = selectionStart; i <= selectionEnd; i++) {\r\n var c = chars[i];\r\n if (c.lineIndex != cl) {\r\n drawSelectionRect(cx, cy, w, h);\r\n cx = c.x;\r\n cy = c.y;\r\n cl = c.lineIndex;\r\n w = 0;\r\n }\r\n w += c.width;\r\n }\r\n drawSelectionRect(cx, cy, w, h);\r\n innerContainer.addChildAt(self.selection, 0);\r\n }\r\n };\r\n\r\n this.selectRange = function (startIndex, endIndex) {\r\n if (startIndex > -1 && endIndex > -1) {\r\n var start = Math.min(startIndex, endIndex, chars.length - 1);\r\n var end = Math.min(Math.max(startIndex, endIndex), chars.length - 1);\r\n if (start != selectionStart || end != selectionEnd) {\r\n hasSelection = true;\r\n this.selection.visible = true;\r\n selectionStart = start;\r\n selectionEnd = end;\r\n hideCaret();\r\n updateSelectionGraphics();\r\n updateSelectionColors();\r\n }\r\n this.focus();\r\n }\r\n else {\r\n self.clearSelection();\r\n }\r\n };\r\n\r\n this.clearSelection = function () {\r\n if (hasSelection) {\r\n //remove color\r\n hasSelection = false;\r\n this.selection.visible = false;\r\n selectionStart = -1;\r\n selectionEnd = -1;\r\n updateSelectionColors();\r\n }\r\n };\r\n}\r\n\r\nTextInput.prototype = Object.create(InputBase.prototype);\r\nTextInput.prototype.constructor = TextInput;\r\nmodule.exports = TextInput;\r\n\r\nObject.defineProperties(TextInput.prototype, {\r\n value: {\r\n get: function () {\r\n return this._value;\r\n },\r\n set: function (val) {\r\n if (this.maxLength)\r\n val = val.slice(0, this.maxLength);\r\n\r\n if (this._value != val) {\r\n this._lastValue = this._value;\r\n this._value = val;\r\n this._dirtyText = true;\r\n this.update();\r\n this.emit(\"change\");\r\n\r\n }\r\n }\r\n },\r\n text: {\r\n get: function () {\r\n return this.value;\r\n },\r\n set: function (val) {\r\n this.value = val;\r\n }\r\n }\r\n});\r\n\r\n\r\n/*\r\n * Features:\r\n * multiLine, shift selection, Mouse Selection, Cut, Copy, Paste, Delete, Backspace, Arrow navigation, tabIndex\r\n * \r\n * Methods:\r\n * blur()\r\n * focus()\r\n * select() - selects all text\r\n * selectRange(startIndex, endIndex)\r\n * clearSelection() \r\n * setCaretIndex(index) moves caret to index\r\n * \r\n * \r\n * Events:\r\n * \"change\"\r\n * \"blur\"\r\n * \"blur\"\r\n * \"focus\"\r\n * \"focusChanged\" param: [bool]focus\r\n * \r\n * \r\n */","var Tween = require('./Tween');\r\n\r\nfunction Ticker(autoStart) {\r\n PIXI.utils.EventEmitter.call(this);\r\n this._disabled = true;\r\n this._now = 0;\r\n\r\n this.DeltaTime = 0;\r\n this.Time = performance.now();\r\n this.Ms = 0;\r\n if (autoStart) {\r\n this.disabled = false;\r\n }\r\n Ticker.shared = this;\r\n}\r\n\r\nTicker.prototype = Object.create(PIXI.utils.EventEmitter.prototype);\r\nTicker.prototype.constructor = Ticker;\r\n\r\nmodule.exports = Ticker;\r\n\r\n\r\n\r\nObject.defineProperties(Ticker.prototype, {\r\n disabled: {\r\n get: function () {\r\n return this._disabled;\r\n },\r\n set: function (val) {\r\n if (!this._disabled) {\r\n this._disabled = true;\r\n }\r\n else {\r\n this._disabled = false;\r\n Ticker.shared = this;\r\n this.update(performance.now(), true);\r\n }\r\n }\r\n },\r\n});\r\n\r\n\r\n\r\n/**\r\n * Updates the text\r\n *\r\n * @private\r\n */\r\nTicker.prototype.update = function (time) {\r\n Ticker.shared._now = time;\r\n Ticker.shared.Ms = Ticker.shared._now - Ticker.shared.Time;\r\n Ticker.shared.Time = Ticker.shared._now;\r\n Ticker.shared.DeltaTime = Ticker.shared.Ms * 0.001;\r\n Ticker.shared.emit(\"update\", Ticker.shared.DeltaTime);\r\n Tween._update(Ticker.shared.DeltaTime);\r\n if (!Ticker.shared._disabled)\r\n requestAnimationFrame(Ticker.shared.update);\r\n};\r\n\r\n\r\n\r\n\r\nTicker.on = function (event, fn, context) {\r\n Ticker.prototype.on.apply(this.shared, arguments);\r\n};\r\n\r\nTicker.once = function (event, fn, context) {\r\n Ticker.prototype.once.apply(this.shared, arguments);\r\n};\r\n\r\nTicker.removeListener = function (event, fn) {\r\n Ticker.prototype.removeListener.apply(this.shared, arguments);\r\n};\r\n\r\n\r\nTicker.shared = new Ticker(true);","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * An UI sprite object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param Texture {PIXI.Texture} The texture for the sprite\r\n * @param [Width=Texture.width] {number} Width of tilingsprite\r\n * @param [Height=Texture.height] {number} Height of tiling sprite\r\n */\r\nfunction TilingSprite(t, width, height) {\r\n this.sprite = new PIXI.extras.TilingSprite(t);\r\n UIBase.call(this, width || this.sprite.width, height || this.sprite.height);\r\n this.container.addChild(this.sprite);\r\n}\r\n\r\nTilingSprite.prototype = Object.create(UIBase.prototype);\r\nTilingSprite.prototype.constructor = TilingSprite;\r\nmodule.exports = TilingSprite;\r\n\r\n/**\r\n * Updates the text\r\n *\r\n * @private\r\n */\r\nTilingSprite.prototype.update = function () {\r\n if (this.tint !== null)\r\n this.sprite.tint = this.tint;\r\n\r\n if (this.blendMode !== null)\r\n this.sprite.blendMode = this.blendMode;\r\n\r\n this.sprite.width = this._width;\r\n this.sprite.height = this._height;\r\n};\r\n\r\nObject.defineProperties(TilingSprite.prototype, {\r\n tilePosition: {\r\n get: function () {\r\n return this.sprite.tilePosition;\r\n },\r\n set: function (val) {\r\n this.sprite.tilePosition = val;\r\n }\r\n },\r\n tileScale: {\r\n get: function () {\r\n return this.sprite.tileScale;\r\n },\r\n set: function (val) {\r\n this.sprite.tileScale = val;\r\n }\r\n }\r\n});","var MathHelper = require('./MathHelper');\r\nvar Ease = require('./Ease/Ease');\r\nvar _tweenItemCache = [];\r\nvar _callbackItemCache = [];\r\nvar _tweenObjects = {};\r\nvar _activeTweenObjects = {};\r\nvar _currentId = 0;\r\n\r\nvar TweenObject = function (object) {\r\n this.object = object;\r\n this.tweens = {};\r\n this.active = false;\r\n};\r\n\r\nvar CallbackItem = function () {\r\n this._ready = false;\r\n this.obj = null;\r\n this.parent = null;\r\n this.key = \"\";\r\n this.time = 0;\r\n this.callback = null;\r\n this.currentTime = 0;\r\n};\r\n\r\nCallbackItem.prototype.set = function (obj, callback, time) {\r\n\r\n\r\n this.obj = obj.object;\r\n\r\n if (!this.obj._currentCallbackID)\r\n this.obj._currentCallbackID = 1;\r\n else\r\n this.obj._currentCallbackID++;\r\n\r\n this.time = time;\r\n this.parent = obj;\r\n this.callback = callback;\r\n this._ready = false;\r\n this.key = \"cb_\" + this.obj._currentCallbackID;\r\n this.currentTime = 0;\r\n if (!this.parent.active) {\r\n this.parent.active = true;\r\n _activeTweenObjects[this.obj._tweenObjectId] = this.parent;\r\n }\r\n};\r\n\r\nCallbackItem.prototype.update = function (delta) {\r\n this.currentTime += delta;\r\n if (this.currentTime >= this.time) {\r\n this._ready = true;\r\n delete this.parent.tweens[this.key];\r\n if (!Object.keys(this.parent.tweens).length) {\r\n this.parent.active = false;\r\n delete _activeTweenObjects[this.obj._tweenObjectId];\r\n }\r\n this.callback();\r\n }\r\n};\r\n\r\nvar TweenItem = function () {\r\n this._ready = false;\r\n this.parent = null;\r\n this.obj = null;\r\n this.key = \"\";\r\n this.from = 0;\r\n this.to = 0;\r\n this.time = 0;\r\n this.ease = 0;\r\n this.currentTime = 0;\r\n this.t = 0;\r\n};\r\n\r\n\r\nTweenItem.prototype.set = function (obj, key, from, to, time, ease) {\r\n this.parent = obj;\r\n this.obj = obj.object;\r\n this.key = key;\r\n this.surfix = getSurfix(to);\r\n this.to = getToValue(to);\r\n this.from = getFromValue(from, to, this.obj, key);\r\n this.time = time;\r\n this.currentTime = 0;\r\n this.ease = ease;\r\n this._ready = false;\r\n\r\n if (!this.parent.active) {\r\n this.parent.active = true;\r\n _activeTweenObjects[this.obj._tweenObjectId] = this.parent;\r\n }\r\n\r\n};\r\n\r\nTweenItem.prototype.update = function (delta) {\r\n this.currentTime += delta;\r\n this.t = Math.min(this.currentTime, this.time) / this.time;\r\n if (this.ease)\r\n this.t = this.ease.getPosition(this.t);\r\n\r\n var val = MathHelper.Lerp(this.from, this.to, this.t);\r\n this.obj[this.key] = this.surfix ? val + this.surfix : val;\r\n\r\n if (this.currentTime >= this.time) {\r\n this._ready = true;\r\n delete this.parent.tweens[this.key];\r\n if (!Object.keys(this.parent.tweens).length) {\r\n this.parent.active = false;\r\n delete _activeTweenObjects[this.obj._tweenObjectId];\r\n }\r\n }\r\n};\r\n\r\n\r\n\r\nvar widthKeys = [\"width\", \"minWidth\", \"maxWidth\", \"anchorLeft\", \"anchorRight\", \"left\", \"right\", \"x\"];\r\nvar heightKeys = [\"height\", \"minHeight\", \"maxHeight\", \"anchorTop\", \"anchorBottom\", \"top\", \"bottom\", \"y\"];\r\n\r\n\r\nfunction getFromValue(from, to, obj, key) {\r\n //both number\r\n if (!isNaN(from) && !isNaN(to))\r\n return from;\r\n\r\n //both percentage\r\n if (isNaN(from) && isNaN(to) && from.indexOf('%') !== -1 && to.indexOf('%') !== -1)\r\n return parseFloat(from.replace('%', ''));\r\n\r\n //convert from to px\r\n if (isNaN(from) && !isNaN(to) && from.indexOf('%') !== -1) {\r\n if (widthKeys.indexOf(key) !== -1)\r\n return obj.parent._width * (parseFloat(from.replace('%', '')) * 0.01);\r\n else if (heightKeys.indexOf(key) !== -1)\r\n return obj.parent._height * (parseFloat(from.replace('%', '')) * 0.01);\r\n else\r\n return 0;\r\n }\r\n\r\n //convert from to percentage\r\n if (!isNaN(from) && isNaN(to) && to.indexOf('%') !== -1) {\r\n if (widthKeys.indexOf(key) !== -1)\r\n return from / obj.parent._width * 100;\r\n else if (heightKeys.indexOf(key) !== -1)\r\n return from / obj.parent._height * 100;\r\n else\r\n return 0;\r\n }\r\n return 0;\r\n}\r\n\r\nfunction getSurfix(to) {\r\n if (isNaN(to) && to.indexOf('%') !== -1)\r\n return \"%\";\r\n}\r\n\r\nfunction getToValue(to) {\r\n if (!isNaN(to))\r\n return to;\r\n if (isNaN(to) && to.indexOf('%') !== -1)\r\n return parseFloat(to.replace('%', ''));\r\n}\r\n\r\n\r\nfunction getObject(obj) {\r\n if (!obj._tweenObjectId) {\r\n obj._tweenObjectId = _currentId;\r\n _currentId++;\r\n }\r\n var object = _tweenObjects[obj._tweenObjectId];\r\n if (!object) {\r\n object = _tweenObjects[obj._tweenObjectId] = new TweenObject(obj);\r\n }\r\n return object;\r\n}\r\n\r\nfunction getTweenItem() {\r\n for (var i = 0; i < _tweenItemCache.length; i++) {\r\n if (_tweenItemCache[i]._ready)\r\n return _tweenItemCache[i];\r\n }\r\n\r\n var tween = new TweenItem();\r\n _tweenItemCache.push(tween);\r\n return tween;\r\n}\r\n\r\nfunction getCallbackItem() {\r\n for (var i = 0; i < _callbackItemCache.length; i++) {\r\n if (_callbackItemCache[i]._ready)\r\n return _callbackItemCache[i];\r\n }\r\n\r\n var cb = new CallbackItem();\r\n _callbackItemCache.push(cb);\r\n return cb;\r\n}\r\n\r\nvar Tween = {\r\n to: function (obj, time, params, ease) {\r\n var object = getObject(obj);\r\n for (var key in params) {\r\n if (key === \"onComplete\") {\r\n var cb = getCallbackItem();\r\n cb.set(object, params[key], time);\r\n object.tweens[cb.key] = cb;\r\n continue;\r\n }\r\n\r\n if (time) {\r\n if (params[key] == obj[key] || typeof obj[key] === \"undefined\") continue;\r\n if (!object.tweens[key])\r\n object.tweens[key] = getTweenItem();\r\n object.tweens[key].set(object, key, obj[key], params[key], time, ease);\r\n }\r\n }\r\n if (!time) this.set(obj, params);\r\n },\r\n from: function (obj, time, params, ease) {\r\n var object = getObject(obj);\r\n for (var key in params) {\r\n if (key === \"onComplete\") {\r\n var cb = getCallbackItem();\r\n cb.set(object, params[key], time);\r\n object.tweens[cb.key] = cb;\r\n continue;\r\n }\r\n\r\n if (time) {\r\n if (params[key] == obj[key] || typeof obj[key] === \"undefined\") continue;\r\n if (!object.tweens[key])\r\n object.tweens[key] = getTweenItem();\r\n object.tweens[key].set(object, key, params[key], obj[key], time, ease);\r\n }\r\n }\r\n if (!time) this.set(obj, params);\r\n },\r\n fromTo: function (obj, time, paramsFrom, paramsTo, ease) {\r\n var object = getObject(obj);\r\n for (var key in paramsTo) {\r\n if (key === \"onComplete\") {\r\n var cb = getCallbackItem();\r\n cb.set(object, paramsTo[key], time);\r\n object.tweens[cb.key] = cb;\r\n continue;\r\n }\r\n if (time) {\r\n if (paramsFrom[key] == paramsTo[key] || typeof obj[key] === \"undefined\" || typeof paramsFrom[key] === \"undefined\") continue;\r\n if (!object.tweens[key]) {\r\n object.tweens[key] = getTweenItem();\r\n }\r\n object.tweens[key].set(object, key, paramsFrom[key], paramsTo[key], time, ease);\r\n }\r\n }\r\n if (!time) this.set(obj, paramsTo);\r\n },\r\n set: function (obj, params) {\r\n var object = getObject(obj);\r\n for (var key in params) {\r\n if (params[key] == obj[key] || typeof obj[key] === \"undefined\") continue;\r\n if (object.tweens[key]) delete object.tweens[key];\r\n obj[key] = params[key];\r\n }\r\n },\r\n _update: function (delta) {\r\n for (var id in _activeTweenObjects) {\r\n var object = _activeTweenObjects[id];\r\n for (var key in object.tweens) {\r\n object.tweens[key].update(delta);\r\n }\r\n }\r\n }\r\n};\r\n\r\n\r\nmodule.exports = Tween;","var UI = {\r\n Stage: require('./Stage'),\r\n Container: require('./Container'),\r\n ScrollingContainer: require('./ScrollingContainer'),\r\n SortableList: require('./SortableList'),\r\n Sprite: require('./Sprite'),\r\n TilingSprite: require('./TilingSprite'),\r\n SliceSprite: require('./SliceSprite'),\r\n Slider: require('./Slider'),\r\n ScrollBar: require('./ScrollBar'),\r\n Text: require('./Text'),\r\n DynamicText: require('./DynamicText/DynamicText'),\r\n DynamicTextStyle: require('./DynamicText/DynamicTextStyle'),\r\n TextInput: require('./TextInput'),\r\n Button: require('./Button'),\r\n CheckBox: require('./CheckBox'),\r\n MathHelper: require('./MathHelper'),\r\n Tween: require('./Tween'),\r\n Ease: require('./Ease/Ease'),\r\n Interaction: require('./Interaction/Interaction'),\r\n Ticker: require('./Ticker').shared,\r\n};\r\n\r\n\r\nmodule.exports = UI;","var UISettings = require('./UISettings'),\r\n UI = require('./UI'),\r\n DragEvent = require('./Interaction/DragEvent'),\r\n DragDropController = require('./Interaction/DragDropController');\r\n\r\n/**\r\n * Base class of all UIObjects\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @param width {Number} Width of the UIObject\r\n * @param height {Number} Height of the UIObject\r\n */\r\nfunction UIBase(width, height) {\r\n PIXI.utils.EventEmitter.call(this);\r\n this.container = new PIXI.Container();\r\n this.setting = new UISettings();\r\n this.children = [];\r\n this.parent = null;\r\n this.stage = null;\r\n this.initialized = false;\r\n this.dragInitialized = false;\r\n this.dropInitialized = false;\r\n this.dirty = true;\r\n this._oldWidth = -1;\r\n this._oldHeight = -1;\r\n this.pixelPerfect = true;\r\n\r\n\r\n if (width && isNaN(width) && width.indexOf('%') != -1) {\r\n this.setting.widthPct = parseFloat(width.replace('%', '')) * 0.01;\r\n }\r\n else {\r\n this.setting.widthPct = null;\r\n }\r\n\r\n if (height && isNaN(height) && height.indexOf('%') != -1)\r\n this.setting.heightPct = parseFloat(height.replace('%', '')) * 0.01;\r\n else {\r\n this.setting.heightPct = null;\r\n }\r\n\r\n this.setting.width = width || 0;\r\n this.setting.height = height || 0;\r\n\r\n //actual values\r\n this._width = 0;\r\n this._height = 0;\r\n this._minWidth = null;\r\n this._minHeight = null;\r\n this._maxWidth = null;\r\n this._maxHeight = null;\r\n this._anchorLeft = null;\r\n this._anchorRight = null;\r\n this._anchorTop = null;\r\n this._anchorBottom = null;\r\n this._left = null;\r\n this._right = null;\r\n this._top = null;\r\n this._bottom = null;\r\n\r\n this._dragPosition = null; //used for overriding positions if tweens is playing\r\n}\r\n\r\nUIBase.prototype = Object.create(PIXI.utils.EventEmitter.prototype);\r\nUIBase.prototype.constructor = UIBase;\r\nmodule.exports = UIBase;\r\n\r\n/**\r\n * Renders the object using the WebGL renderer\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.updatesettings = function (updateChildren, updateParent) {\r\n\r\n if (!this.initialized) {\r\n if (this.parent !== null && this.parent.stage !== null && this.parent.initialized) {\r\n this.initialize();\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n\r\n if (updateParent) this.updateParent();\r\n this.baseupdate();\r\n this.update();\r\n if (updateChildren) this.updateChildren();\r\n};\r\n\r\n/**\r\n * Update method (override from other UIObjects)\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.update = function () {\r\n};\r\n\r\n\r\n/**\r\n * Updates the parent\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.updateParent = function () {\r\n if (this.parent !== null) {\r\n if (this.parent.updatesettings) {\r\n this.parent.updatesettings(false, true);\r\n }\r\n }\r\n};\r\n\r\n\r\n/**\r\n * Updates the UIObject with all base settings\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.baseupdate = function () {\r\n //return if parent size didnt change\r\n if (this.parent !== null) {\r\n var parentHeight, parentWidth;\r\n\r\n\r\n\r\n //transform convertion (% etc)\r\n this.dirty = true; \r\n this._width = this.actual_width;\r\n this._height = this.actual_height;\r\n this._minWidth = this.actual_minWidth;\r\n this._minHeight = this.actual_minHeight;\r\n this._maxWidth = this.actual_maxWidth;\r\n this._maxHeight = this.actual_maxHeight;\r\n this._anchorLeft = this.actual_anchorLeft;\r\n this._anchorRight = this.actual_anchorRight;\r\n this._anchorTop = this.actual_anchorTop;\r\n this._anchorBottom = this.actual_anchorBottom;\r\n this._left = this.actual_left;\r\n this._right = this.actual_right;\r\n this._top = this.actual_top;\r\n this._bottom = this.actual_bottom;\r\n this._parentWidth = parentWidth = this.parent._width;\r\n this._parentHeight = parentHeight = this.parent._height;\r\n this.dirty = false;\r\n\r\n\r\n var pivotXOffset = this.pivotX * this._width;\r\n var pivotYOffset = this.pivotY * this._height;\r\n\r\n if (this.pixelPerfect) {\r\n pivotXOffset = Math.round(pivotXOffset);\r\n pivotYOffset = Math.round(pivotYOffset);\r\n }\r\n\r\n\r\n if (this.horizontalAlign === null) {\r\n //get anchors (use left right if conflict)\r\n if (this._anchorLeft !== null && this._anchorRight === null && this._right !== null)\r\n this._anchorRight = this._right;\r\n else if (this._anchorLeft === null && this._anchorRight !== null && this._left !== null)\r\n this._anchorLeft = this._left;\r\n else if (this._anchorLeft === null && this._anchorRight === null && this._left !== null && this._right !== null) {\r\n this._anchorLeft = this._left;\r\n this._anchorRight = this._right;\r\n }\r\n\r\n\r\n var useHorizontalAnchor = this._anchorLeft !== null || this._anchorRight !== null;\r\n var useLeftRight = !useHorizontalAnchor && (this._left !== null || this._right !== null);\r\n\r\n if (useLeftRight) {\r\n if (this._left !== null)\r\n this.container.position.x = this._left;\r\n else if (this._right !== null)\r\n this.container.position.x = parentWidth - this._right;\r\n }\r\n else if (useHorizontalAnchor) {\r\n\r\n if (this._anchorLeft !== null && this._anchorRight === null)\r\n this.container.position.x = this._anchorLeft;\r\n else if (this._anchorLeft === null && this._anchorRight !== null)\r\n this.container.position.x = parentWidth - this._width - this._anchorRight;\r\n else if (this._anchorLeft !== null && this._anchorRight !== null) {\r\n this.container.position.x = this._anchorLeft;\r\n this._width = parentWidth - this._anchorLeft - this._anchorRight;\r\n }\r\n this.container.position.x += pivotXOffset;\r\n }\r\n else {\r\n this.container.position.x = 0;\r\n }\r\n }\r\n\r\n\r\n\r\n if (this.verticalAlign === null) {\r\n //get anchors (use top bottom if conflict)\r\n if (this._anchorTop !== null && this._anchorBottom === null && this._bottom !== null)\r\n this._anchorBottom = this._bottom;\r\n if (this._anchorTop === null && this._anchorBottom !== null && this._top !== null)\r\n this._anchorTop = this._top;\r\n\r\n var useVerticalAnchor = this._anchorTop !== null || this._anchorBottom !== null;\r\n var useTopBottom = !useVerticalAnchor && (this._top !== null || this._bottom !== null);\r\n\r\n if (useTopBottom) {\r\n if (this._top !== null)\r\n this.container.position.y = this._top;\r\n else if (this._bottom !== null)\r\n this.container.position.y = parentHeight - this._bottom;\r\n }\r\n else if (useVerticalAnchor) {\r\n if (this._anchorTop !== null && this._anchorBottom === null)\r\n this.container.position.y = this._anchorTop;\r\n else if (this._anchorTop === null && this._anchorBottom !== null)\r\n this.container.position.y = parentHeight - this._height - this._anchorBottom;\r\n else if (this._anchorTop !== null && this._anchorBottom !== null) {\r\n this.container.position.y = this._anchorTop;\r\n this._height = parentHeight - this._anchorTop - this._anchorBottom;\r\n }\r\n this.container.position.y += pivotYOffset;\r\n }\r\n else {\r\n this.container.position.y = 0;\r\n }\r\n }\r\n\r\n //min/max sizes\r\n if (this._maxWidth !== null && this._width > this._maxWidth) this._width = this._maxWidth;\r\n if (this._width < this._minWidth) this._width = this._minWidth;\r\n\r\n if (this._maxHeight !== null && this._height > this._maxHeight) this._height = this._maxHeight;\r\n if (this._height < this._minHeight) this._height = this._minHeight;\r\n\r\n\r\n //pure vertical/horizontal align\r\n if (this.horizontalAlign !== null) {\r\n if (this.horizontalAlign == \"center\")\r\n this.container.position.x = parentWidth * 0.5 - this._width * 0.5;\r\n else if (this.horizontalAlign == \"right\")\r\n this.container.position.x = parentWidth - this._width;\r\n else\r\n this.container.position.x = 0;\r\n this.container.position.x += pivotXOffset;\r\n }\r\n if (this.verticalAlign !== null) {\r\n if (this.verticalAlign == \"middle\")\r\n this.container.position.y = parentHeight * 0.5 - this._height * 0.5;\r\n else if (this.verticalAlign == \"bottom\")\r\n this.container.position.y = parentHeight - this._height;\r\n else\r\n this.container.position.y = 0;\r\n this.container.position.y += pivotYOffset;\r\n }\r\n\r\n\r\n //Unrestricted dragging\r\n if (this.dragging && !this.setting.dragRestricted) {\r\n this.container.position.x = this._dragPosition.x;\r\n this.container.position.y = this._dragPosition.y;\r\n }\r\n\r\n\r\n //scale\r\n if (this.setting.scaleX !== null) this.container.scale.x = this.setting.scaleX;\r\n if (this.setting.scaleY !== null) this.container.scale.y = this.setting.scaleY;\r\n\r\n //pivot\r\n if (this.setting.pivotX !== null) this.container.pivot.x = pivotXOffset;\r\n if (this.setting.pivotY !== null) this.container.pivot.y = pivotYOffset;\r\n\r\n if (this.setting.alpha !== null) this.container.alpha = this.setting.alpha;\r\n if (this.setting.rotation !== null) this.container.rotation = this.setting.rotation;\r\n\r\n //make pixel perfect\r\n if (this.pixelPerfect) {\r\n this._width = Math.round(this._width);\r\n this._height = Math.round(this._height);\r\n this.container.position.x = Math.round(this.container.position.x);\r\n this.container.position.y = Math.round(this.container.position.y);\r\n }\r\n\r\n\r\n\r\n }\r\n};\r\n\r\n\r\n/**\r\n * Updates all UI Children\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.updateChildren = function () {\r\n for (var i = 0; i < this.children.length; i++) {\r\n this.children[i].updatesettings(true);\r\n }\r\n};\r\n\r\nUIBase.prototype.addChild = function (UIObject) {\r\n var argumentsLength = arguments.length;\r\n if (argumentsLength > 1) {\r\n for (var i = 0; i < argumentsLength; i++) {\r\n this.addChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n if (UIObject.parent) {\r\n UIObject.parent.removeChild(UIObject);\r\n }\r\n\r\n UIObject.parent = this;\r\n this.container.addChild(UIObject.container);\r\n this.children.push(UIObject);\r\n this.updatesettings(true, true);\r\n }\r\n\r\n return UIObject;\r\n};\r\n\r\nUIBase.prototype.removeChild = function (UIObject) {\r\n var argumentLenght = arguments.length;\r\n if (argumentLenght > 1) {\r\n for (var i = 0; i < argumentLenght; i++) {\r\n this.removeChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n var index = this.children.indexOf(UIObject);\r\n if (index !== -1) {\r\n var oldUIParent = UIObject.parent;\r\n var oldParent = UIObject.container.parent;\r\n UIObject.container.parent.removeChild(UIObject.container);\r\n this.children.splice(index, 1);\r\n UIObject.parent = null;\r\n\r\n //oldParent._recursivePostUpdateTransform();\r\n setTimeout(function () { //hack but cant get the transforms to update propertly otherwice?\r\n if (oldUIParent.updatesettings)\r\n oldUIParent.updatesettings(true, true);\r\n }, 0);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Initializes the object when its added to an UIStage\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.initialize = function () {\r\n this.initialized = true;\r\n this.stage = this.parent.stage;\r\n if (this.draggable) {\r\n this.initDraggable();\r\n }\r\n\r\n if (this.droppable) {\r\n this.initDroppable();\r\n }\r\n};\r\n\r\nUIBase.prototype.clearDraggable = function () {\r\n if (this.dragInitialized) {\r\n this.dragInitialized = false;\r\n this.drag.stopEvent();\r\n }\r\n};\r\n\r\nUIBase.prototype.initDraggable = function () {\r\n if (!this.dragInitialized) {\r\n this.dragInitialized = true;\r\n var containerStart = new PIXI.Point(),\r\n stageOffset = new PIXI.Point(),\r\n self = this;\r\n\r\n this._dragPosition = new PIXI.Point();\r\n this.drag = new DragEvent(this);\r\n this.drag.onDragStart = function (e) {\r\n var added = DragDropController.add(this, e);\r\n if (!this.dragging && added) {\r\n this.dragging = true;\r\n this.container.interactive = false;\r\n containerStart.copy(this.container.position);\r\n if (this.dragContainer) {\r\n var c = this.dragContainer.container ? this.dragContainer.container : this.dragContainer;\r\n if (c) {\r\n //_this.container._recursivePostUpdateTransform();\r\n stageOffset.set(c.worldTransform.tx - this.parent.container.worldTransform.tx, c.worldTransform.ty - this.parent.container.worldTransform.ty);\r\n c.addChild(this.container);\r\n }\r\n } else {\r\n stageOffset.set(0);\r\n }\r\n\r\n }\r\n };\r\n\r\n\r\n this.drag.onDragMove = function (e, offset) {\r\n if (this.dragging) {\r\n this._dragPosition.set(containerStart.x + offset.x - stageOffset.x, containerStart.y + offset.y - stageOffset.y);\r\n this.x = this._dragPosition.x;\r\n this.y = this._dragPosition.y;\r\n }\r\n };\r\n\r\n this.drag.onDragEnd = function (e) {\r\n if (this.dragging) {\r\n this.dragging = false;\r\n //Return to container after 1ms if not picked up by a droppable\r\n setTimeout(function () {\r\n self.container.interactive = true;\r\n var item = DragDropController.getItem(self);\r\n if (item) {\r\n var container = self.parent === self.stage ? self.stage : self.parent.container;\r\n container.toLocal(self.container.position, self.container.parent, self);\r\n if (container != self.container) {\r\n self.parent.addChild(self);\r\n }\r\n }\r\n }, 1);\r\n }\r\n\r\n };\r\n }\r\n};\r\n\r\nUIBase.prototype.clearDroppable = function () {\r\n if (this.dropInitialized) {\r\n this.dropInitialized = false;\r\n this.container.removeListener('mouseup', this.onDrop);\r\n this.container.removeListener('touchend', this.onDrop);\r\n }\r\n};\r\n\r\nUIBase.prototype.initDroppable = function () {\r\n if (!this.dropInitialized) {\r\n this.dropInitialized = true;\r\n var container = this.container,\r\n self = this;\r\n\r\n this.container.interactive = true;\r\n this.onDrop = function (event) {\r\n var item = DragDropController.getEventItem(event, self.dropGroup);\r\n if (item && item.dragging) {\r\n item.dragging = false;\r\n item.container.interactive = true;\r\n var parent = self.droppableReparent !== null ? self.droppableReparent : self;\r\n parent.container.toLocal(item.container.position, item.container.parent, item);\r\n if (parent.container != item.container.parent)\r\n parent.addChild(item);\r\n }\r\n };\r\n\r\n container.on('mouseup', this.onDrop);\r\n container.on('touchend', this.onDrop);\r\n }\r\n};\r\n\r\nObject.defineProperties(UIBase.prototype, {\r\n x: {\r\n get: function () {\r\n return this.setting.left;\r\n },\r\n set: function (val) {\r\n this.left = val;\r\n }\r\n },\r\n y: {\r\n get: function () {\r\n return this.setting.top;\r\n },\r\n set: function (val) {\r\n this.top = val;\r\n }\r\n },\r\n width: {\r\n get: function () {\r\n return this.setting.width;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.widthPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.widthPct = null;\r\n \r\n this.setting.width = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_width: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.widthPct !== null) {\r\n this._width = this.parent._width * this.setting.widthPct;\r\n }\r\n else {\r\n this._width = this.setting.width;\r\n }\r\n }\r\n return this._width;\r\n }\r\n },\r\n height: {\r\n get: function () {\r\n return this.setting.height;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.heightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.heightPct = null;\r\n \r\n this.setting.height = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_height: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.heightPct !== null) {\r\n this._height = this.parent._height * this.setting.heightPct;\r\n }\r\n else {\r\n this._height = this.setting.height;\r\n }\r\n }\r\n return this._height;\r\n }\r\n },\r\n minWidth: {\r\n get: function () {\r\n return this.setting.minWidth;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.minWidthPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.minWidthPct = null;\r\n \r\n this.setting.minWidth = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_minWidth: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.minWidthPct !== null) {\r\n this._minWidth = this.parent._width * this.setting.minWidthPct;\r\n }\r\n else {\r\n this._minWidth = this.setting.minWidth;\r\n }\r\n }\r\n return this._minWidth;\r\n }\r\n },\r\n minHeight: {\r\n get: function () {\r\n return this.setting.minHeight;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.minHeightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.minHeightPct = null;\r\n \r\n this.setting.minHeight = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_minHeight: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.minHeightPct !== null) {\r\n this._minHeight = this.parent._height * this.setting.minHeightPct;\r\n }\r\n else {\r\n this._minHeight = this.setting.minHeight;\r\n }\r\n }\r\n return this._minHeight;\r\n }\r\n },\r\n maxWidth: {\r\n get: function () {\r\n return this.setting.maxWidth;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.maxWidthPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.maxWidthPct = null;\r\n \r\n\r\n this.setting.maxWidth = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_maxWidth: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.maxWidthPct !== null) {\r\n this._maxWidth = this.parent._width * this.setting.maxWidthPct;\r\n }\r\n else {\r\n this._maxWidth = this.setting.maxWidth;\r\n }\r\n }\r\n return this._maxWidth;\r\n }\r\n },\r\n maxHeight: {\r\n get: function () {\r\n return this.setting.maxHeight;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.maxHeightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.maxHeightPct = null;\r\n \r\n this.setting.maxHeight = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_maxHeight: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.maxHeightPct !== null) {\r\n this._maxHeight = this.parent._height * this.setting.maxHeightPct;\r\n }\r\n else {\r\n this._maxHeight = this.setting.maxHeight;\r\n }\r\n }\r\n return this._maxHeight;\r\n }\r\n },\r\n anchorLeft: {\r\n get: function () {\r\n return this.setting.anchorLeft;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1) \r\n this.setting.anchorLeftPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else \r\n this.setting.anchorLeftPct = null;\r\n \r\n this.setting.anchorLeft = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorLeft: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorLeftPct !== null) {\r\n this._anchorLeft = this.parent._width * this.setting.anchorLeftPct;\r\n }\r\n else {\r\n this._anchorLeft = this.setting.anchorLeft;\r\n }\r\n }\r\n return this._anchorLeft;\r\n }\r\n },\r\n anchorRight: {\r\n get: function () {\r\n return this.setting.anchorRight;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.anchorRightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.anchorRightPct = null;\r\n \r\n this.setting.anchorRight = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorRight: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorRightPct !== null) {\r\n this._anchorRight = this.parent._width * this.setting.anchorRightPct;\r\n }\r\n else {\r\n this._anchorRight = this.setting.anchorRight;\r\n }\r\n }\r\n return this._anchorRight;\r\n }\r\n },\r\n anchorTop: {\r\n get: function () {\r\n return this.setting.anchorTop;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.anchorTopPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.anchorTopPct = null;\r\n \r\n this.setting.anchorTop = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorTop: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorTopPct !== null) {\r\n this._anchorTop = this.parent._height * this.setting.anchorTopPct;\r\n }\r\n else {\r\n this._anchorTop = this.setting.anchorTop;\r\n }\r\n }\r\n return this._anchorTop;\r\n }\r\n },\r\n anchorBottom: {\r\n get: function () {\r\n return this.setting.anchorBottom;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.anchorBottomPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else \r\n this.setting.anchorBottomPct = null;\r\n \r\n this.setting.anchorBottom = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorBottom: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorBottomPct !== null) {\r\n this._anchorBottom = this.parent._height * this.setting.anchorBottomPct;\r\n }\r\n else {\r\n this._anchorBottom = this.setting.anchorBottom;\r\n }\r\n }\r\n return this._anchorBottom;\r\n }\r\n },\r\n left: {\r\n get: function () {\r\n return this.setting.left;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.leftPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.leftPct = null;\r\n \r\n this.setting.left = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_left: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.leftPct !== null) {\r\n this._left = this.parent._width * this.setting.leftPct;\r\n }\r\n else {\r\n this._left = this.setting.left;\r\n }\r\n }\r\n return this._left;\r\n }\r\n },\r\n right: {\r\n get: function () {\r\n return this.setting.right;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.rightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.rightPct = null;\r\n\r\n this.setting.right = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_right: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.rightPct !== null) {\r\n this._right = this.parent._width * this.setting.rightPct;\r\n }\r\n else {\r\n this._right = this.setting.right;\r\n }\r\n }\r\n return this._right;\r\n }\r\n },\r\n top: {\r\n get: function () {\r\n return this.setting.top;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.topPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.topPct = null;\r\n\r\n this.setting.top = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_top: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.topPct !== null) {\r\n this._top = this.parent._height * this.setting.topPct;\r\n }\r\n else {\r\n this._top = this.setting.top;\r\n }\r\n }\r\n return this._top;\r\n }\r\n },\r\n bottom: {\r\n get: function () {\r\n return this.setting.bottom;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.bottomPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.bottomPct = null;\r\n\r\n this.setting.bottom = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_bottom: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.bottomPct !== null) {\r\n this._bottom = this.parent._height * this.setting.bottomPct;\r\n }\r\n else {\r\n this._bottom = this.setting.bottom;\r\n }\r\n }\r\n return this._bottom;\r\n }\r\n },\r\n verticalAlign: {\r\n get: function () {\r\n return this.setting.verticalAlign;\r\n },\r\n set: function (val) {\r\n this.setting.verticalAlign = val;\r\n this.baseupdate();\r\n }\r\n },\r\n horizontalAlign: {\r\n get: function () {\r\n return this.setting.horizontalAlign;\r\n },\r\n set: function (val) {\r\n this.setting.horizontalAlign = val;\r\n this.baseupdate();\r\n }\r\n },\r\n tint: {\r\n get: function () {\r\n return this.setting.tint;\r\n },\r\n set: function (val) {\r\n this.setting.tint = val;\r\n this.update();\r\n }\r\n },\r\n alpha: {\r\n get: function () {\r\n return this.setting.alpha;\r\n },\r\n set: function (val) {\r\n this.setting.alpha = val;\r\n this.container.alpha = val;\r\n }\r\n },\r\n rotation: {\r\n get: function () {\r\n return this.setting.rotation;\r\n },\r\n set: function (val) {\r\n this.setting.rotation = val;\r\n this.container.rotation = val;\r\n }\r\n },\r\n blendMode: {\r\n get: function () {\r\n return this.setting.blendMode;\r\n },\r\n set: function (val) {\r\n this.setting.blendMode = val;\r\n this.update();\r\n }\r\n },\r\n pivotX: {\r\n get: function () {\r\n return this.setting.pivotX;\r\n },\r\n set: function (val) {\r\n this.setting.pivotX = val;\r\n this.baseupdate();\r\n this.update();\r\n }\r\n },\r\n pivotY: {\r\n get: function () {\r\n return this.setting.pivotY;\r\n },\r\n set: function (val) {\r\n this.setting.pivotY = val;\r\n this.baseupdate();\r\n this.update();\r\n }\r\n },\r\n pivot: {\r\n set: function (val) {\r\n this.setting.pivotX = val;\r\n this.setting.pivotY = val;\r\n this.baseupdate();\r\n this.update();\r\n }\r\n },\r\n scaleX: {\r\n get: function () {\r\n return this.setting.scaleX;\r\n },\r\n set: function (val) {\r\n this.setting.scaleX = val;\r\n this.container.scale.x = val;\r\n }\r\n },\r\n scaleY: {\r\n get: function () {\r\n return this.setting.scaleY;\r\n },\r\n set: function (val) {\r\n this.setting.scaleY = val;\r\n this.container.scale.y = val;\r\n }\r\n },\r\n scale: {\r\n get: function () {\r\n return this.setting.scaleX;\r\n },\r\n set: function (val) {\r\n this.setting.scaleX = val;\r\n this.setting.scaleY = val;\r\n this.container.scale.x = val;\r\n this.container.scale.y = val;\r\n }\r\n },\r\n\r\n draggable: {\r\n get: function () {\r\n return this.setting.draggable;\r\n },\r\n set: function (val) {\r\n this.setting.draggable = val;\r\n if (this.initialized) {\r\n if (val)\r\n this.initDraggable();\r\n else\r\n this.clearDraggable();\r\n }\r\n }\r\n },\r\n dragRestricted: {\r\n get: function () {\r\n return this.setting.dragRestricted;\r\n },\r\n set: function (val) {\r\n this.setting.dragRestricted = val;\r\n }\r\n },\r\n dragRestrictAxis: {\r\n get: function () {\r\n return this.setting.dragRestrictAxis;\r\n },\r\n set: function (val) {\r\n this.setting.dragRestrictAxis = val;\r\n }\r\n },\r\n dragThreshold: {\r\n get: function () {\r\n return this.setting.dragThreshold;\r\n },\r\n set: function (val) {\r\n this.setting.dragThreshold = val;\r\n }\r\n },\r\n dragGroup: {\r\n get: function () {\r\n return this.setting.dragGroup;\r\n },\r\n set: function (val) {\r\n this.setting.dragGroup = val;\r\n }\r\n },\r\n dragContainer: {\r\n get: function () {\r\n return this.setting.dragContainer;\r\n },\r\n set: function (val) {\r\n this.setting.dragContainer = val;\r\n }\r\n },\r\n droppable: {\r\n get: function () {\r\n return this.setting.droppable;\r\n },\r\n set: function (val) {\r\n this.setting.droppable = true;\r\n if (this.initialized) {\r\n if (val)\r\n this.initDroppable();\r\n else\r\n this.clearDroppable();\r\n }\r\n }\r\n },\r\n droppableReparent: {\r\n get: function () {\r\n return this.setting.droppableReparent;\r\n },\r\n set: function (val) {\r\n this.setting.droppableReparent = val;\r\n }\r\n },\r\n dropGroup: {\r\n get: function () {\r\n return this.setting.dropGroup;\r\n },\r\n set: function (val) {\r\n this.setting.dropGroup = val;\r\n }\r\n },\r\n renderable: {\r\n get: function () {\r\n return this.container.renderable;\r\n },\r\n set: function (val) {\r\n this.container.renderable = val;\r\n }\r\n },\r\n visible: {\r\n get: function () {\r\n return this.container.visible;\r\n },\r\n set: function (val) {\r\n this.container.visible = val;\r\n }\r\n },\r\n cacheAsBitmap: {\r\n get: function () {\r\n return this.container.cacheAsBitmap;\r\n },\r\n set: function (val) {\r\n this.container.cacheAsBitmap = val;\r\n }\r\n },\r\n onClick: {\r\n get: function () {\r\n return this.container.click;\r\n },\r\n set: function (val) {\r\n this.container.click = val;\r\n }\r\n },\r\n interactive: {\r\n get: function () {\r\n return this.container.interactive;\r\n },\r\n set: function (val) {\r\n this.container.interactive = val;\r\n }\r\n },\r\n interactiveChildren: {\r\n get: function () {\r\n return this.container.interactiveChildren;\r\n },\r\n set: function (val) {\r\n this.container.interactiveChildren = val;\r\n }\r\n }\r\n});","/**\r\n * Settings object for all UIObjects\r\n *\r\n * @class\r\n * @memberof PIXI.UI\r\n */\r\nfunction UISettings() {\r\n this.width = 0;\r\n this.height = 0;\r\n this.minHeight = 0;\r\n this.maxWidth = null;\r\n this.maxHeight = null;\r\n this.left = null;\r\n this.right = null;\r\n this.top = null;\r\n this.bottom = null;\r\n this.anchorLeft = null;\r\n this.anchorRight = null;\r\n this.anchorTop = null;\r\n this.anchorBottom = null;\r\n\r\n this.widthPct = null;\r\n this.heightPct = null;\r\n this.minWidthPct = null;\r\n this.minHeightPct = null;\r\n this.maxWidthPct = null;\r\n this.maxHeightPct = null;\r\n this.minWidth = 0;\r\n this.leftPct = null;\r\n this.rightPct = null;\r\n this.topPct = null;\r\n this.bottomPct = null;\r\n this.anchorLeftPct = null;\r\n this.anchorRightPct = null;\r\n this.anchorTopPct = null;\r\n this.anchorBottomPct = null;\r\n\r\n this.pivotX = 0;\r\n this.pivotY = 0;\r\n this.scaleX = 1;\r\n this.scaleY = 1;\r\n this.verticalAlign = null;\r\n this.horizontalAlign = null;\r\n this.rotation = null;\r\n this.blendMode = null;\r\n this.tint = null;\r\n this.alpha = 1;\r\n\r\n\r\n this.draggable = null;\r\n this.dragRestricted = false;\r\n this.dragRestrictAxis = null; //x, y\r\n this.dragThreshold = 0;\r\n this.dragGroup = null;\r\n this.dragContainer = null;\r\n this.droppable = null;\r\n this.droppableReparent = null;\r\n this.dropGroup = null;\r\n}\r\n\r\n\r\nmodule.exports = UISettings;\r\n\r\n\r\n","\r\nvar Library = {\r\n UI: require('./UI')\r\n};\r\n\r\n//dump everything into extras\r\n\r\nObject.assign(PIXI, Library);\r\n\r\nmodule.exports = Library;\r\n"],"sourceRoot":"."} \ No newline at end of file diff --git a/bin/pixi-ui.min.js b/bin/pixi-ui.min.js index 39aa28d..dede28d 100644 --- a/bin/pixi-ui.min.js +++ b/bin/pixi-ui.min.js @@ -1,11 +1,11 @@ /*! * pixi-ui - v1.0.0 - * Compiled Sat, 22 Jul 2017 09:46:16 UTC + * Compiled Tue, 08 Aug 2017 21:06:40 UTC * * pixi-ui is licensed under the MIT License. * http://www.opensource.org/licenses/mit-license */ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var i;i="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,(i.pixiUi||(i.pixiUi={})).min=t()}}(function(){return function t(i,e,n){function s(o,r){if(!e[o]){if(!i[o]){var u="function"==typeof require&&require;if(!r&&u)return u(o,!0);if(h)return h(o,!0);var a=new Error("Cannot find module '"+o+"'");throw a.code="MODULE_NOT_FOUND",a}var l=e[o]={exports:{}};i[o][0].call(l.exports,function(t){var e=i[o][1][t];return s(e?e:t)},l,l.exports,t,i,e,n)}return e[o].exports}for(var h="function"==typeof require&&require,o=0;oF)for(t=F;tthis._height&&"hidden"===t.overflowY)break;k.newline&&(B=!1),k.space||k.newline?h++:k.wordIndex=h,a=Math.max(a,t.fontSize),k.lineIndex=l,t.align!==o.align&&(d=t.align),k.space&&(g=i,f=n.x);var A=Math.round(k.data.width)+s(t.letterSpacing,0);if(!e&&!v&&!k.newline&&n.x+A>this._width){if(t.wrap)if(k.space)v=!0;else{if(g!==-1){m-=i-g,i=g-1,g=-1,n.x=f,v=!0;continue}if(t.breakWords){T&&(n.x-=T.style.letterSpacing,n.x-=T.data.width),i-=2,m--,v=!0;continue}}if("hidden"==t.overflowX&&!v&&(B=!0,t.ellipsis&&!P)){P=!0;var S=I[l];S||(S=I[l]=[new c,new c,new c]);for(var M=0;M<3;M++){var L=S[M];L.value=".",L.data=D.getCharObject(L.value,t),L.style=t,L.x=n.x+k.data.xOffset,L.y=parseFloat(t.verticalAlign)+L.data.yOffset,L.lineIndex=l,n.x+=Math.round(L.data.width)+s(t.letterSpacing,0),p[m]=L,m++}}}B||(k.x=n.x+k.data.xOffset,k.y=parseFloat(t.verticalAlign)+k.data.yOffset,n.x+=A,p[m]=k,m++),(v||k.newline||i===E-1)&&(T&&(n.x-=T.style.letterSpacing,T.space&&(n.x-=T.data.width)),k.space&&(n.x-=k.data.width,n.x-=s(t.letterSpacing,0)),_+=r,b[l]=P,x[l]=n.x,C[l]=r,w[l]=a,y[l]=d,r=n.x=f=a=0,d=o.align,g=-1,l++,v=B=P=!1)}F=m};var P=["","","","
"];this.processInputText=function(){for(var t=[o],e=0,s=0,h=Array.from(this._inputText),r=0;r")+1);var _=!0;if(f.length){if(""===f)style=style.clone(),style.fontStyle="italic",t.push(style);else if(""===f)style=style.clone(),style.fontWeight="bold",t.push(style);else if("
"===f)style=style.clone(),style.align="center",t.push(style);else if(P.indexOf(f)!==-1)t.length>1&&t.splice(t.length-1,1);else if(f.startsWith("\s]*)(?=\s|\/>))(?=[^<]*>)/g,m=v.exec(f);if(null!==m){for(style=style.clone();null!==m;){switch(m[1]){case"family":m[1]="fontFamily";break;case"size":m[1]="fontSize";break;case"weight":m[1]="fontWeight";break;case"style":m[1]="fontStyle";break;case"valign":m[1]="verticalAlign";break;case"spacing":m[1]="letterSpacing";break;case"color":m[1]="tint"}style[m[1]]=m[4],m=v.exec(f)}t.push(style)}}else _=!1;if(_){s+=f.length,r+=f.length-1;continue}}}else{var x=d().exec(a);if(null!==x){for(r--,a="";null!==x&&a!==x[0];)r++,a=x[0],x=d().exec(a+h[r+1]);g=!0}}var C=u[e];C||(C=new c,u[e]=C),C.style=style,g&&(C.style=C.style.clone(),C.style.fontFamily=n.settings.defaultEmojiFont),C.data=D.getCharObject(a,C.style),C.value=a,C.space=p,C.newline=l,C.emoji=g,e++,s+=a.length}E=e},this.lazyUpdate=null;var B=this;this.update=function(){null===B.lazyUpdate&&(B.lazyUpdate=setTimeout(function(){console.log("UPDATING TEXT");var t=!e&&(B._width!=v||B._height!=m||B.dirtyText);(B.dirtyText||B.dirtyStyle)&&(B.dirtyText=B.dirtyStyle=!1,B.dirtyRender=!0,B.processInputText()),(t||B.dirtyRender)&&(B.dirtyRender=!1,v=B._width,m=B.height,B.prepareForRender(),B.render()),B.lazyUpdate=null},0))}}function s(t,i){return isNaN(t)?i:parseFloat(t)}function h(t,i){return isNaN(t)?i:parseInt(t)}function o(t,i){return"string"==typeof t&&t.length?t:i}function r(t,i){if("number"==typeof t)return t;var e=parseInt(t.replace("#","0x"));return isNaN(e)?i:e}function u(t,i){var e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return i=s(i,1),!!e&&"rgba("+parseInt(e[1],16)+","+parseInt(e[2],16)+","+parseInt(e[3],16)+","+i+")"}var a=t("../UIBase"),l=t("./DynamicTextStyle"),c=t("./DynamicChar"),d=t("emoji-regex"),D=null;n.prototype=Object.create(a.prototype),n.prototype.constructor=n,i.exports=n,n.settings={debugSpriteSheet:!1,defaultEmojiFont:"Segoe UI Emoji"},Object.defineProperties(n.prototype,{value:{get:function(){return this._inputText},set:function(t){t!==this._inputText&&(this._inputText=t,this.dirtyText=!0,this.update(),console.log("Updating Text to: "+t))}},text:{get:function(){return this.value},set:function(t){this.value=t}},style:{get:function(){return this._style},set:function(t){var i=new l(this);i.merge(t),this._style.merge(i),this.dirtyStyle=!0,this.update()}}});var p=document.createElement("canvas"),g=p.getContext("2d");p.width=100,p.height=100;var f=function(t){var i,e,r,a,l,c,d,D=(devicePixelRatio||1,[]),f=[],_=256,v=2048,m=function(t,i){var e=this.children=[];this.rect=new PIXI.Rectangle(0,0,t||0,i||0),this.data=null,this.insert=function(t,i,n){if(e.length>0){var s=e[0].insert(t,i,n);return null!==s?s:e[1].insert(t,i,n)}if(null!==this.data)return null;if(t>this.rect.width||i>this.rect.height)return null;if(t==this.rect.width&&i==this.rect.height)return this.data=n,n.frame.x=this.rect.x,n.frame.y=this.rect.y,this;e.push(new m),e.push(new m);var h=this.rect.width-t,o=this.rect.height-i;return h>o?(e[0].rect=new PIXI.Rectangle(this.rect.x,this.rect.y,t,this.rect.height),e[1].rect=new PIXI.Rectangle(this.rect.x+t,this.rect.y,this.rect.width-t,this.rect.height)):(e[0].rect=new PIXI.Rectangle(this.rect.x,this.rect.y,this.rect.width,i),e[1].rect=new PIXI.Rectangle(this.rect.x,this.rect.y+i,this.rect.width,this.rect.height-i)),e[0].insert(t,i,n)}},x=function(){i=document.createElement("canvas"),e=i.getContext("2d"),f.push(i),d=_,i.width=i.height=d,c=new m(d,d),r=[],a=PIXI.BaseTexture.fromCanvas(i),a.mipmap=!1,a.resolution=1,a.update(),n.settings.debugSpriteSheet&&(i.className="DynamicText_SpriteSheet",document.body.appendChild(i))};this.fontFamilyCache={};var C=function(t,i){i&&a.update();for(var e=0;ei.frame.height?-1:t.frame.widthi.frame.width?-1:0},F=function(){D.sort(y);for(var i=!1,e=!1,n=0;n0&&!C[w];)w-=4;var I=w/y|0;for(w=3;w=F&&(w=w-F+4);var b=w%y/4|0,P=1;for(w=F-1;w>=0&&!C[w];)w-=y,w<0&&(w=F-1-4*P++);var B=w%y/4+1|0;r.ascent=Math.round(f-E),r.descent=Math.round(I-f),r.height=1+Math.round(I-E),r.bounds={minx:b-c,maxx:B-c,miny:0,maxy:I-E},r.rect={x:r.bounds.minx,y:-r.ascent-2,width:r.bounds.maxx-r.bounds.minx+2,height:r.ascent+r.descent+4},r.canvas=document.createElement("canvas"),r.canvas.width=r.rect.width,r.canvas.height=r.rect.height;var k=r.canvas.getContext("2d");k.drawImage(p,-c-r.rect.x,-f-r.rect.y),r.rect.x=r.rect.y=0}return r};x()}},{"../UIBase":32,"./DynamicChar":5,"./DynamicTextStyle":7,"emoji-regex":1}],7:[function(t,i,e){function n(t){this.respectDirty=!0,this._parent=t||null,this._scale=1,this._align="left",this._fontFamily="Arial",this._fontSize=26,this._fontWeight="normal",this._fontStyle="normal",this._letterSpacing=0,this._lineHeight=0,this._verticalAlign=0,this._rotation=0,this._skew=0,this._tint="#FFFFFF",this._fill="#FFFFFF",this._shadow="",this._stroke=0,this._strokeFill="",this._strokeShadow="",this._wrap=!0,this._breakWords=!1,this._overflowX="visible",this._overflowY="visible",this._ellipsis=!1;var i=null;this.ellipsisSize=function(t){return this.ellipsis?(null===i&&(i=3*(t.getCharObject(".",this).width+this.letterSpacing)),i):0}}n.prototype.clone=function(){var t=new n;return t.merge(this),t},n.prototype.merge=function(t){if("object"==typeof t){this.respectDirty=!1;for(var i in t){var e=t[i];"function"!=typeof e&&"respectDirty"!==i&&"_parent"!==i&&(this[i]=t[i])}this.respectDirty=!0,this._dirty=!0}},n.prototype.ctxKey=function(t){return[t,this.fill,this.shadow,this.stroke,this.strokeFill,this.strokeShadow].join("|")},n.prototype.ctxFont=function(){var t=Math.min(200,Math.max(1,this.fontSize||26))+"px ",i="bold"===this.fontWeight?this.fontWeight+" ":"",e="italic"===this.fontStyle||"oblique"===this.fontStyle?this.fontStyle+" ":"";return i+e+t+this.fontFamily},n.prototype.constructor=n,i.exports=n,Object.defineProperties(n.prototype,{_dirty:{set:function(t){this.respectDirty&&null!==this._parent&&(this._parent.dirtyStyle=t,this._parent.update())}},scale:{get:function(){return this._scale},set:function(t){t!==this._scale&&(this._scale=t,this._dirty=!0)}},align:{get:function(){return this._align},set:function(t){t!==this._align&&(this._align=t,this._dirty=!0)}},fontFamily:{get:function(){return this._fontFamily},set:function(t){t!==this._fontFamily&&(this._fontFamily=t,this._dirty=!0)}},fontSize:{get:function(){return this._fontSize},set:function(t){t!==this._fontSize&&(this._fontSize=t,this._dirty=!0)}},fontWeight:{get:function(){return this._fontWeight},set:function(t){t!==this._fontWeight&&(this._fontWeight=t,this._dirty=!0)}},fontStyle:{get:function(){return this._fontStyle},set:function(t){t!==this._fontStyle&&(this._fontStyle=t,this._dirty=!0)}},letterSpacing:{get:function(){return this._letterSpacing},set:function(t){t!==this._letterSpacing&&(this._letterSpacing=t,this._dirty=!0)}},lineHeight:{get:function(){return this._lineHeight},set:function(t){t!==this._lineHeight&&(this._lineHeight=t,this._dirty=!0)}},verticalAlign:{get:function(){return this._verticalAlign},set:function(t){t!==this._verticalAlign&&(this._verticalAlign=t,this._dirty=!0)}},rotation:{get:function(){return this._rotation},set:function(t){t!==this._rotation&&(this._rotation=t,this._dirty=!0)}},skew:{get:function(){return this._skew},set:function(t){t!==this._skew&&(this._skew=t,this._dirty=!0)}},tint:{get:function(){return this._tint},set:function(t){t!==this._tint&&(this._tint=t,this._dirty=!0)}},fill:{get:function(){return this._fill},set:function(t){t!==this._fill&&(this._fill=t,this._dirty=!0)}},shadow:{get:function(){return this._shadow},set:function(t){t!==this._shadow&&(this._shadow=t,this._dirty=!0)}},stroke:{get:function(){return this._stroke},set:function(t){t!==this._stroke&&(this._stroke=t,this._dirty=!0)}},strokeFill:{get:function(){return this._strokeFill},set:function(t){t!==this._strokeFill&&(this._strokeFill=t,this._dirty=!0)}},strokeShadow:{get:function(){return this._strokeShadow},set:function(t){t!==this._strokeShadow&&(this._strokeShadow=t,this._dirty=!0)}},wrap:{get:function(){return this._wrap},set:function(t){t!==this._wrap&&(this._wrap=t,this._dirty=!0)}},breakWords:{get:function(){return this._breakWords},set:function(t){t!==this._breakWords&&(this._breakWords=t,this._dirty=!0)}},overflowX:{get:function(){return this._overflowX},set:function(t){t!==this._overflowX&&(this._overflowX=t,this._dirty=!0)}},overflowY:{get:function(){return this._overflowY},set:function(t){t!==this._overflowY&&(this._overflowY=t,this._dirty=!0)}},ellipsis:{get:function(){return this._ellipsis},set:function(t){t!==this._ellipsis&&(this._ellipsis=t,this._dirty=!0)}}})},{}],8:[function(t,i,e){function n(t){var i=Object.create(o.prototype);return i.getPosition=t,i}function s(t,i,e){return{easeIn:t,easeOut:i,easeInOut:e}}var h={},o=t("./EaseBase"),r=t("./ExponentialEase"),u=.5*Math.PI;h.Linear=new o,h.Power0={easeNone:h.Linear},h.Power1=h.Quad=s(new r(1,1,0),new r(1,0,1),new r(1,1,1)),h.Power2=h.Cubic=s(new r(2,1,0),new r(2,0,1),new r(2,1,1)),h.Power3=h.Quart=s(new r(3,1,0),new r(3,0,1),new r(3,1,1)),h.Power4=h.Quint=s(new r(4,1,0),new r(4,0,1),new r(4,1,1)),h.Bounce={BounceIn:n(function(t){return(t=1-t)<1/2.75?1-7.5625*t*t:t<2/2.75?1-(7.5625*(t-=1.5/2.75)*t+.75):t<2.5/2.75?1-(7.5625*(t-=2.25/2.75)*t+.9375):1-(7.5625*(t-=2.625/2.75)*t+.984375)}),BounceOut:n(function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}),BounceInOut:n(function(t){var i=t<.5;return t=i?1-2*t:2*t-1,t=t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375,i?.5*(1-t):.5*t+.5})},h.Circ={CircIn:n(function(t){return-(Math.sqrt(1-t*t)-1)}),CircOut:n(function(t){return Math.sqrt(1-(t-=1)*t)}),CircInOut:n(function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)})},h.Expo={ExpoIn:n(function(t){return Math.pow(2,10*(t-1))-.001}),ExpoOut:n(function(t){return 1-Math.pow(2,-10*t)}),ExpoInOut:n(function(t){return(t*=2)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*(t-1)))})},h.Sine={SineIn:n(function(t){return-Math.cos(t*u)+1}),SineOut:n(function(t){return Math.sin(t*u)}),SineInOut:n(function(t){return-.5*(Math.cos(Math.PI*t)-1)})},i.exports=h},{"./EaseBase":9,"./ExponentialEase":10}],9:[function(t,i,e){function n(){this.getPosition=function(t){return t}}n.prototype.constructor=n,i.exports=n},{}],10:[function(t,i,e){function n(t,i,e){var n=t,s=i&&e?3:e?1:2;this.getPosition=function(t){var i=1===s?1-t:2===s?t:t<.5?2*t:2*(1-t);return 1===n?i*=i:2===n?i*=i*i:3===n?i*=i*i*i:4===n&&(i*=i*i*i*i),1===s?1-i:2===s?i:t<.5?i/2:1-i/2}}var s=t("./EaseBase");n.prototype=Object.create(s.prototype),n.prototype.constructor=n,i.exports=n},{"./EaseBase":9}],11:[function(t,i,e){function n(t,i,e,n){s.call(this,t,i);var o=this;this._focused=!1,this._useTab=this._usePrev=this._useNext=!0,this.container.interactive=!0,h.registrer(this,e,n);var r=function(t){9===t.which?o._useTab&&(h.fireTab(),t.preventDefault()):38===t.which?o._usePrev&&(h.firePrev(),t.preventDefault()):40===t.which&&o._useNext&&(h.fireNext(),t.preventDefault())},u=function(t){o.__down||o.blur()};this.container.on("pointerdown",function(t){o.focus(),o.__down=!0}),this.container.on("pointerup",function(t){o.__down=!1}),this.container.on("pointerupoutside",function(t){o.__down=!1}),this._bindEvents=function(){null!==this.stage&&(this.stage.on("pointerdown",u),document.addEventListener("keydown",r))},this._clearEvents=function(){null!==this.stage&&(this.stage.off("pointerdown",u),document.removeEventListener("keydown",r))}}var s=t("./UIBase"),h=t("./Interaction/InputController");t("./Interaction/ClickEvent");n.prototype=Object.create(s.prototype),n.prototype.constructor=n,i.exports=n,n.prototype.focus=function(){this._focused||(this._focused=!0,this._bindEvents(),h.set(this),this.emit("focusChanged",!0),this.emit("focus"))},n.prototype.blur=function(){this._focused&&(h.clear(),this._focused=!1,this._clearEvents(),this.emit("focusChanged",!1),this.emit("blur"))}},{"./Interaction/ClickEvent":12,"./Interaction/InputController":15,"./UIBase":32}],12:[function(t,i,e){var n=function(t){var i=!1,e=this,n=0,s=!1;t.container.interactive=!0;var h=function(s){n=s.data.identifier,e.onPress.call(t,s,!0),i||(t.container.on("mouseup",r),t.container.on("mouseupoutside",u),t.container.on("touchend",r),t.container.on("touchendoutside",u),i=!0)},o=function(s){s.data.identifier===n&&(i&&(t.container.removeListener("mouseup",r),t.container.removeListener("mouseupoutside",u),t.container.removeListener("touchend",r),t.container.removeListener("touchendoutside",u),i=!1),e.onPress.call(t,s,!1))},r=function(i){i.data.identifier===n&&(o(i),e.onClick.call(t,i))},u=function(t){t.data.identifier===n&&o(t)},a=function(i){s||(s=!0,e.onHover.call(t,i))},l=function(i){s&&(s=!1,e.onLeave.call(t,i))};this.stopEvent=function(){i&&(t.container.removeListener("mouseup",r),t.container.removeListener("mouseupoutside",u),t.container.removeListener("touchend",r),t.container.removeListener("touchendoutside",u),i=!1),t.container.removeListener("mousedown",h),t.container.removeListener("touchstart",h),t.container.removeListener("mouseover",a),t.container.removeListener("mouseout",l)},this.startEvent=function(){t.container.on("mousedown",h),t.container.on("touchstart",h),t.container.on("mouseover",a),t.container.on("mouseout",l)},this.startEvent()};n.prototype.constructor=n,i.exports=n,n.prototype.onHover=function(t){},n.prototype.onLeave=function(t){},n.prototype.onPress=function(t,i){},n.prototype.onClick=function(t){}},{}],13:[function(t,i,e){var n=[],s={add:function(t,i){return t._dragDropEventId=i.data.identifier, -n.indexOf(t)===-1&&(n.push(t),!0)},getItem:function(t){for(var i,e=null,s=0;sh?r=!0:"y"==t.dragRestrictAxis&&o<=h&&(r=!0),r))return void D(i);a.onDragStart.call(t,i),u=!0}a.onDragMove.call(t,i,n)}},D=function(e){e.data.identifier===l&&i&&(t.stage.removeListener("mousemove",d),t.stage.removeListener("touchmove",d),t.stage.removeListener("mouseup",D),t.stage.removeListener("mouseupoutside",D),t.stage.removeListener("touchend",D),t.stage.removeListener("touchendoutside",D),t.stage.removeListener("touchcancel",D),u=!1,i=!1,a.onDragEnd.call(t,e),a.onPress.call(t,e,!1))};this.stopEvent=function(){i&&(t.stage.removeListener("mousemove",d),t.stage.removeListener("touchmove",d),t.stage.removeListener("mouseup",D),t.stage.removeListener("mouseupoutside",D),t.stage.removeListener("touchend",D),t.stage.removeListener("touchendoutside",D),i=!1),t.container.removeListener("mousedown",c),t.container.removeListener("touchstart",c)},this.startEvent=function(){t.container.on("mousedown",c),t.container.on("touchstart",c)},this.startEvent()};n.prototype.constructor=n,i.exports=n,n.prototype.onPress=function(t,i){},n.prototype.onDragEnd=function(t){},n.prototype.onDragMove=function(t,i){},n.prototype.onDragStart=function(t){}},{}],15:[function(t,i,e){var n,s={},h={},o={},r={registrer:function(t,i,e){var n=e||"default",h=s[n];h||(h=s[n]=[]);var o=h.indexOf(t);o===-1&&(t._tabIndex=void 0!==i?i:-1,t._tabGroup=h,h.push(t),h.sort(function(t,i){return t._tabIndexi._tabIndex?1:0}))},set:function(t){n&&"function"==typeof n.blur&&n.blur(),n=t},clear:function(){n=void 0},fireTab:function(){if(n){var t=n._tabGroup.indexOf(n)+1;t>=n._tabGroup.length&&(t=0),n._tabGroup[t].focus()}},fireNext:function(){if(n){var t=n._tabGroup.indexOf(n)+1;t>=n._tabGroup.length&&(t=n._tabGroup.length-1),n._tabGroup[t].focus()}},firePrev:function(){if(n){var t=n._tabGroup.indexOf(n)-1;t<0&&(t=0),n._tabGroup[t].focus()}},registrerCheckGroup:function(t){var i=t.checkGroup,e=h[i];e||(e=h[i]={}),e[t.value]=t,t.checked&&(o[i]=t.value)},updateCheckGroupSelected:function(t){var i=h[t.checkGroup];for(var e in i){var n=i[e];n!==t&&(n.checked=!1)}o[t.checkGroup]=t.value},getCheckGroupSelectedValue:function(t){return o[t]?o[t]:""},setCheckGroupSelectedValue:function(t,i){var e=h[t];if(e){var n=e[i];n&&(n.checked=!0)}}};i.exports=r},{}],16:[function(t,i,e){var n={ClickEvent:t("./ClickEvent"),DragEvent:t("./DragEvent"),MouseScrollEvent:t("./MouseScrollEvent")};i.exports=n},{"./ClickEvent":12,"./DragEvent":14,"./MouseScrollEvent":17}],17:[function(t,i,e){var n=function(t,i){var e=!1,n=new PIXI.Point,s=this;t.container.interactive=!0;var h=function(e){i&&e.preventDefault(),n.set(e.deltaX,e.deltaY),s.onMouseScroll.call(t,e,n)},o=function(t){e||(document.addEventListener("mousewheel",h,!1),document.addEventListener("DOMMouseScroll",h,!1),e=!0)},r=function(t){e&&(document.removeEventListener("mousewheel",h),document.removeEventListener("DOMMouseScroll",h),e=!1)};this.stopEvent=function(){e&&(document.removeEventListener("mousewheel",h),document.removeEventListener("DOMMouseScroll",h),e=!1),t.container.removeListener("mouseover",o),t.container.removeListener("mouseout",r)},this.startEvent=function(){t.container.on("mouseover",o),t.container.on("mouseout",r)},this.startEvent()};n.prototype.constructor=n,i.exports=n,n.prototype.onMouseScroll=function(t,i){}},{}],18:[function(t,i,e){var n={Lerp:function(t,i,e){return e>1?e=1:e<0&&(e=0),t+(i-t)*e},Round:function(t,i){var e=Math.pow(10,i);return Math.round(t*e)/e}};i.exports=n},{}],19:[function(t,i,e){function n(t){s.call(this,{track:t.track,handle:t.handle,fill:null,vertical:t.vertical}),this.scrollingContainer=t.scrollingContainer,this.autohide=t.autohide,this._hidden=!1}var s=t("./Slider"),h=t("./Tween");t("./Ease/Ease");n.prototype=Object.create(s.prototype),n.prototype.constructor=n,i.exports=n,n.prototype.initialize=function(){s.prototype.initialize.call(this),this.decimals=3,this._onValueChanging=function(t){var i=this.scrollingContainer._height/this.scrollingContainer.innerContainer.height||.001;i<1&&this.scrollingContainer.forcePctPosition(this.vertical?"y":"x",this._amt)},this.scrollingContainer._scrollBars.push(this)},n.prototype.alignToContainer=function(){var t,i,e=this.vertical?"y":"x",n=this.vertical?"height":"width",s=this.vertical?"top":"left",h=this.scrollingContainer.innerContainer[n]?-(this.scrollingContainer.innerContainer[e]/this.scrollingContainer.innerContainer[n]):0,o=this.scrollingContainer.innerContainer[n]?this.scrollingContainer["_"+n]/this.scrollingContainer.innerContainer[n]:1;this._amt=this.scrollingContainer["_"+n]?-(this.scrollingContainer.innerContainer[e]/(this.scrollingContainer.innerContainer[n]-this.scrollingContainer["_"+n])):0,o>=1?(i=this["_"+n],this.handle[s]=.5*i,this.toggleHidden(!0)):(i=this["_"+n]*o,this._amt>1?i-=(this["_"+n]-i)*(this._amt-1):this._amt<0&&(i-=(this["_"+n]-i)*-this._amt),t=this._amt<0?.5*i:this._amt>1?this["_"+n]-.5*i:h*this.scrollingContainer["_"+n]+.5*i,this.handle[s]=t,this.toggleHidden(!1)),this.handle[n]=i},n.prototype.toggleHidden=function(t){this.autohide&&(t&&!this._hidden?(h.to(this,.2,{alpha:0}),this._hidden=!0):!t&&this._hidden&&(h.to(this,.2,{alpha:1}),this._hidden=!1))}},{"./Ease/Ease":8,"./Slider":22,"./Tween":30}],20:[function(t,i,e){function n(t){t=t||{},s.call(this,t.width,t.height),this.mask=new PIXI.Graphics,this.innerContainer=new PIXI.Container,this.innerBounds=new PIXI.Rectangle,this.container.addChild(this.mask),this.container.addChild(this.innerContainer),this.container.mask=this.mask,this.scrollX=void 0!==t.scrollX&&t.scrollX,this.scrollY=void 0===t.scrollY||t.scrollY,this.dragScrolling=void 0===t.dragScrolling||t.dragScrolling,this.softness=void 0!==t.softness?Math.max(Math.min(t.softness||0,1),0):.5,this.radius=t.radius||0,this.expandMask=t.expandMask||0,this.overflowY=t.overflowY||0,this.overflowX=t.overflowX||0,this.animating=!1,this.scrolling=!1,this._scrollBars=[],this.boundCached=performance.now()-1e3}var s=(t("./UIBase"),t("./Container")),h=t("./MathHelper"),o=t("./Ticker"),r=t("./Interaction/DragEvent"),u=t("./Interaction/MouseScrollEvent");n.prototype=Object.create(s.prototype),n.prototype.constructor=n,i.exports=n,n.prototype.initialize=function(){s.prototype.initialize.apply(this),(this.scrollX||this.scrollY)&&this.initScrolling()},n.prototype.update=function(){if(s.prototype.update.apply(this),this._lastWidth!=this._width||this._lastHeight!=this._height){var t=this.expandMask;this.mask.clear(),this.mask.lineStyle(0),this.mask.beginFill(16777215,1),0===this.radius?this.mask.drawRect(-t,-t,this._width+t,this._height+t):this.mask.drawRoundedRect(-t,-t,this._width+t,this.height+t,this.radius),this.mask.endFill(),this._lastWidth=this._width,this._lastHeight=this._height}this.setScrollPosition&&this.setScrollPosition()},n.prototype.addChild=function(t){var i=arguments.length;if(i>1)for(var e=0;e1e3)&&(this.innerContainer.getLocalBounds(this.innerBounds),this.innerContainer.getLocalBounds(this.innerBounds),this.innerBounds.height=this.innerBounds.y+this.innerContainer.height,this.innerBounds.width=this.innerBounds.x+this.innerContainer.width,this.boundCached=performance.now()),this.innerBounds},n.prototype.initScrolling=function(){var t,i=this.innerContainer,e=new PIXI.Point,n=new PIXI.Point,s=new PIXI.Point,a=new PIXI.Point,l=new PIXI.Point,c=this;if(this.forcePctPosition=function(t,e){var s=this.getInnerBounds();this.scrollX&&"x"==t&&(i.position[t]=-((s.width-this._width)*e)),this.scrollY&&"y"==t&&(i.position[t]=-((s.height-this._height)*e)),a[t]=n[t]=i.position[t]},this.focusPosition=function(t){var e,h=this.getInnerBounds();if(this.scrollX){var o=Math.max(0,Math.min(h.width,t.x));o+i.x>this._width?(e=o-this._width,i.x=-e):o+i.x<0&&(e=o+i.x,i.x-=e)}if(this.scrollY){var r=Math.max(0,Math.min(h.height,t.y));r+i.y>this._height?(e=r-this._height,i.y=-e):r+i.y<0&&(e=r+i.y,i.y-=e)}s.copy(i.position),n.copy(i.position),a.copy(i.position),this.updateScrollBars()},this.setScrollPosition=function(t){t&&(l=t),this.animating||(this.animating=!0,s.copy(i.position),n.copy(i.position),o.on("update",this.updateScrollPosition,this))},this.updateScrollPosition=function(i){t=!0,this.scrollX&&this.updateDirection("x",i),this.scrollY&&this.updateDirection("y",i),t&&(o.removeListener("update",this.updateScrollPosition),this.animating=!1)},this.updateDirection=function(e,o){var r,u=this.getInnerBounds();if(r="y"==e?Math.round(Math.min(0,this._height-u.height)):Math.round(Math.min(0,this._width-u.width)),this.scrolling||0===Math.round(l[e])||(n[e]+=l[e],l[e]=h.Lerp(l[e],0,(5+2.5/Math.max(this.softness,.01))*o),n[e]>0?n[e]=0:n[e]0||i[e]0?0:r;a[e]=h.Lerp(a[e],d,(40-30*this.softness)*o),t=!1}else(this.scrolling||0!==Math.round(l[e]))&&(this.scrolling&&(l[e]=a[e]-s[e],s.copy(a)),n[e]>0?(l[e]=0,a[e]=100*this.softness*(1-Math.exp(n[e]/-200))):n[e]1)for(var i=0;ie._sortListValue()?i?-1:1:0;return 0===n&&t._sortListThenByValue&&e._sortListThenByValue&&(n=t._sortListThenByValue()e._sortListThenByValue()?i?-1:1:0),0===n&&(n=t._sortListRnd>e._sortListRnd?1:t._sortListRnd0?h.fromTo(o,this.tweenTime,{x:o.x,y:o.y},{x:0,y:e},this.tweenEase):(o.x=0,o.y=e),e+=o.height,"function"==typeof o.altering&&o.altering(n)}this.tweenTime>0&&setTimeout(function(){t.updatesettings(!1,!0)},1e3*this.tweenTime)}},{"./Container":4,"./Tween":30}],24:[function(t,i,e){function n(t){this.sprite=new PIXI.Sprite(t),s.call(this,this.sprite.width,this.sprite.height),this.container.addChild(this.sprite)}var s=t("./UIBase");n.prototype=Object.create(s.prototype),n.prototype.constructor=n,i.exports=n,n.fromFrame=function(t){return new n(new PIXI.Texture.fromFrame(t))},n.fromImage=function(t){return new n(new PIXI.Texture.fromImage(t))},n.prototype.update=function(){null!==this.tint&&(this.sprite.tint=this.tint),null!==this.blendMode&&(this.sprite.blendMode=this.blendMode),this.sprite.width=this._width,this.sprite.height=this._height}},{"./UIBase":32}],25:[function(t,i,e){function n(t,i){PIXI.Container.call(this),this.__width=t,this.__height=i,this.minWidth=0,this.minHeight=0,this.UIChildren=[],this.stage=this,this.interactive=!0,this.hitArea=new PIXI.Rectangle(0,0,0,0),this.initialized=!0}t("./UIBase");n.prototype=Object.create(PIXI.Container.prototype),n.prototype.constructor=n,i.exports=n,n.prototype.addChild=function(t){var i=arguments.length;if(i>1)for(var e=0;e1)for(var e=0;en&&e>1?(this.scale.set(1/e),this.__height*=e,this.__width*=e):n>1?(this.scale.set(1/n),this.__width*=n,this.__height*=n):1!==this.scale.x&&this.scale.set(1)}this.hitArea.width=this.__width,this.hitArea.height=this.__height;for(var s=0;sh){for(u=e.length-1;u>=h;u--)m.removeChild(e[u]),e[u].destroy();e.splice(h,e.length-h)}var a=!1,d=!1,f=0,_=-1,x=!1;for(u=0;u=i._width-p-g)||(s++,o=0,r+=c,_==-1||d)?(w.lineIndex=s,w.x=o,w.y=r,w.wordIndex=a||d?-1:f,o+=w.width,o>L&&(L=o),r>X&&(X=r)):(u=_-1,_=-1,x=!0)}O=s,m.addChild(D),m.cacheAsBitmap&&(m.cacheAsBitmap=!1,m.cacheAsBitmap=!0),v.update()},V=function(t,i){var n,s=99999,h=-1,o=!1,r=0;O>0&&(r=Math.max(0,Math.min(O,Math.floor(t.y/c))));for(var u=0;ua.x+.5*a.width)}}i?(C=h,w=o):(y=h,F=o)},G=function(){return!!A&&(i.value=i.value.slice(0,k)+i.value.slice(T+1),i.setCaretIndex(k),!0)},U=function(){for(var t=0;t=k&&t<=T?e[t].style.fill=r:e[t].style.fill=o},Y=new PIXI.Point,q=function(t){Y.copy(t),n&&Y.y>=c&&(Y.y+=c),v.focusPosition(Y)},Q=function(){Y.set(0,0),v.focusPosition(Y)},K=function(){D.visible=!1,clearInterval(x)},$=function(){i.clearSelection(),clearInterval(x),D.alpha=1,D.visible=!0,x=setInterval(function(){D.alpha=0===D.alpha?1:0},500)},J=function(t){if(A&&G(),!i.maxLength||e.length0||1===e.length&&D._atEnd)&&(D._atEnd?(i.value=i.value.slice(0,e.length-1),i.setCaretIndex(D._index)):(i.value=i.value.slice(0,D._index-1)+i.value.slice(D._index),i.setCaretIndex(D._index-1))),void t.preventDefault();if(46===t.which)return G()||D._atEnd||(i.value=i.value.slice(0,D._index)+i.value.slice(D._index+1),i.setCaretIndex(D._index)),void t.preventDefault();if(37===t.which||39===t.which){if(P=37===t.which,H)if(A){var s=k===D._index;if(s)if(k===T&&P===D._forward)i.setCaretIndex(D._forward?D._index:D._index+1);else{var h=P?D._index-1:D._index+1;i.selectRange(h,T),D._index=Math.min(e.length-1,Math.max(0,h))}else{var o=P?D._index-1:D._index+1;i.selectRange(k,o),D._index=Math.min(e.length-1,Math.max(0,o))}}else{var r=D._atEnd?D._index+1:D._index,u=P?r-1:r;i.selectRange(u,u),D._index=u,D._forward=!P}else A?i.setCaretIndex(P?k:T+1):i.setCaretIndex(D._index+(P?D._atEnd?0:-1:1));return void t.preventDefault()}return!n||38!==t.which&&40!==t.which?void 0:(B=38===t.which,H?A?(b.y=Math.max(0,Math.min(X,b.y+(B?-c:c))),V(b,!1),console.log(C,y),Math.abs(C-y)<=1?(console.log(C,y),i.setCaretIndex(w?C+1:C)):(D._index=(F?y+1:y)+(D._down?-1:0),i.selectRange(D._down?C:C-1,D._index))):(C=D._index,w=!1,b.copy(D),b.y=Math.max(0,Math.min(X,b.y+(B?-c:c))),V(b,!1),D._index=(F?y+1:y)-(B?0:1),i.selectRange(B?C-1:C,D._index),D._down=!B):A?i.setCaretIndex(B?k:T+1):(I.copy(D),I.y+=B?-c:c,I.x+=1,V(I,!0),i.setCaretIndex(w?C+1:C)),void t.preventDefault())},tt=function(t){t.which!=j&&t.which!=W||(R=!1),t.which===N&&(H=!1)},it=function(t){if(A){var e=t.clipboardData||window.clipboardData;e.setData("Text",i.value.slice(k,T+1))}t.preventDefault()},et=function(t){A&&(it(t),G()),t.preventDefault()},nt=function(t){var i=t.clipboardData||window.clipboardData;J(i.getData("Text")),t.preventDefault()},st=function(t){J(t.data),t.preventDefault()},ht=function(t){i.blur()},ot=new h(this);ot.onPress=function(t,n){if(n){var s=performance.now()-S;if(S=performance.now(),s<250)if(M++,M>1)this.select();else{m.toLocal(E,void 0,I,!0),V(I,!0);var h=e[C];h&&(h.wordIndex!=-1?this.selectWord(h.wordIndex):this.selectRange(C,C))}else M=0,E.copy(t.data.global),m.toLocal(E,void 0,I,!0),e.length&&(V(I,!0),i.setCaretIndex(w?C+1:C))}t.data.originalEvent.preventDefault()},ot.onDragMove=function(t,n){e.length&&this._focused&&(b.x=E.x+n.x,b.y=E.y+n.y,m.toLocal(b,void 0,b,!0),V(b,!1),Cy?(i.selectRange(y,w?C:C-1),D._index=y):w===F?i.setCaretIndex(w?C+1:C):(i.selectRange(C,y),D._index=y),D._forward=C<=y,D._down=n.y>0,q(b))},this.focus=function(){if(!this._focused){s.prototype.focus.call(this);var t=this.container.worldTransform.tx+"px",h=this.container.worldTransform.ty+"px",o=this.container.height+"px",r=this.container.width+"px";_pui_tempInput.setAttribute("style","position:fixed; left:"+t+"; top:"+h+"; height:"+o+"; width:"+r+";"),_pui_tempInput.value="",_pui_tempInput.focus(),_pui_tempInput.setAttribute("style","position:fixed; left:-10px; top:-10px; width:0px; height: 0px;"),m.cacheAsBitmap=!1,_pui_tempInput.addEventListener("blur",ht,!1),document.addEventListener("keydown",Z,!1),document.addEventListener("keyup",tt,!1),document.addEventListener("paste",nt,!1),document.addEventListener("copy",it,!1),document.addEventListener("cut",et,!1),_pui_tempInput.addEventListener("textInput",st,!1),setTimeout(function(){D.visible||i.selection.visible||n||i.setCaretIndex(e.length)},0)}},this.blur=function(){this._focused&&(s.prototype.blur.call(this),R=!1,H=!1,K(),this.clearSelection(),e.length>1&&(m.cacheAsBitmap=!0),_pui_tempInput.removeEventListener("blur",ht),document.removeEventListener("keydown",Z),document.removeEventListener("keyup",tt),document.removeEventListener("paste",nt),document.removeEventListener("copy",it),document.removeEventListener("cut",et),_pui_tempInput.removeEventListener("textInput",st),_pui_tempInput.blur()),n||Q()},this.setCaretIndex=function(t){if(D._atEnd=t>=e.length,D._index=Math.max(0,Math.min(e.length-1,t)),e.length&&t>0){var i=Math.max(0,Math.min(t,e.length-1)),n=e[i];n&&n.wrapped?(D.x=n.x,D.y=n.y):(i=Math.max(0,Math.min(t-1,e.length-1)),n=e[i],D.x=e[i].x+e[i].width,D.y=e[i].lineIndex*c+.5*(c-l))}else D.x=0,D.y=.5*(c-l);q(D),$()},this.select=function(){this.selectRange(0,e.length-1)},this.selectWord=function(t){for(var i=e.length,n=0,s=0;sn&&(n=s));this.selectRange(i,n)};var rt=function(t,e,n,s){i.selection.beginFill("0x"+u.slice(1),1),i.selection.moveTo(t,e),i.selection.lineTo(t+n,e),i.selection.lineTo(t+n,e+s),i.selection.lineTo(t,e+s),i.selection.endFill()},ut=function(){var t=e[k];if(void 0!==t){var n=t.x,s=t.y,h=0,o=l,r=t.lineIndex;i.selection.clear();for(var u=k;u<=T;u++){var a=e[u];a.lineIndex!=r&&(rt(n,s,h,o),n=a.x,s=a.y,r=a.lineIndex,h=0),h+=a.width}rt(n,s,h,o),m.addChildAt(i.selection,0)}};this.selectRange=function(t,n){if(t>-1&&n>-1){var s=Math.min(t,n,e.length-1),h=Math.min(Math.max(t,n),e.length-1); -s==k&&h==T||(A=!0,this.selection.visible=!0,k=s,T=h,K(),ut(),U()),this.focus()}else i.clearSelection()},this.clearSelection=function(){A&&(A=!1,this.selection.visible=!1,k=-1,T=-1,U())}}var s=t("./InputBase"),h=(t("./Container"),t("./Interaction/DragEvent"));n.prototype=Object.create(s.prototype),n.prototype.constructor=n,i.exports=n,Object.defineProperties(n.prototype,{value:{get:function(){return this._value},set:function(t){this.maxLength&&(t=t.slice(0,this.maxLength)),this._value!=t&&(this._lastValue=this._value,this._value=t,this._dirtyText=!0,this.update(),this.emit("change"))}},text:{get:function(){return this.value},set:function(t){this.value=t}}})},{"./Container":4,"./InputBase":11,"./Interaction/DragEvent":14}],28:[function(t,i,e){function n(t){PIXI.utils.EventEmitter.call(this),this._disabled=!0,this._now=0,this.DeltaTime=0,this.Time=performance.now(),this.Ms=0,t&&(this.disabled=!1),n.shared=this}var s=t("./Tween");n.prototype=Object.create(PIXI.utils.EventEmitter.prototype),n.prototype.constructor=n,i.exports=n,Object.defineProperties(n.prototype,{disabled:{get:function(){return this._disabled},set:function(t){this._disabled?(this._disabled=!1,n.shared=this,this.update(performance.now(),!0)):this._disabled=!0}}}),n.prototype.update=function(t){n.shared._now=t,n.shared.Ms=n.shared._now-n.shared.Time,n.shared.Time=n.shared._now,n.shared.DeltaTime=.001*n.shared.Ms,n.shared.emit("update",n.shared.DeltaTime),s._update(n.shared.DeltaTime),n.shared._disabled||requestAnimationFrame(n.shared.update)},n.on=function(t,i,e){n.prototype.on.apply(this.shared,arguments)},n.once=function(t,i,e){n.prototype.once.apply(this.shared,arguments)},n.removeListener=function(t,i){n.prototype.removeListener.apply(this.shared,arguments)},n.shared=new n((!0))},{"./Tween":30}],29:[function(t,i,e){function n(t,i,e){this.sprite=new PIXI.extras.TilingSprite(t),s.call(this,i||this.sprite.width,e||this.sprite.height),this.container.addChild(this.sprite)}var s=t("./UIBase");n.prototype=Object.create(s.prototype),n.prototype.constructor=n,i.exports=n,n.prototype.update=function(){null!==this.tint&&(this.sprite.tint=this.tint),null!==this.blendMode&&(this.sprite.blendMode=this.blendMode),this.sprite.width=this._width,this.sprite.height=this._height},Object.defineProperties(n.prototype,{tilePosition:{get:function(){return this.sprite.tilePosition},set:function(t){this.sprite.tilePosition=t}},tileScale:{get:function(){return this.sprite.tileScale},set:function(t){this.sprite.tileScale=t}}})},{"./UIBase":32}],30:[function(t,i,e){function n(t,i,e,n){return isNaN(t)||isNaN(i)?isNaN(t)&&isNaN(i)&&t.indexOf("%")!==-1&&i.indexOf("%")!==-1?parseFloat(t.replace("%","")):isNaN(t)&&!isNaN(i)&&t.indexOf("%")!==-1?v.indexOf(n)!==-1?e.parent._width*(.01*parseFloat(t.replace("%",""))):m.indexOf(n)!==-1?e.parent._height*(.01*parseFloat(t.replace("%",""))):0:!isNaN(t)&&isNaN(i)&&i.indexOf("%")!==-1?v.indexOf(n)!==-1?t/e.parent._width*100:m.indexOf(n)!==-1?t/e.parent._height*100:0:0:t}function s(t){if(isNaN(t)&&t.indexOf("%")!==-1)return"%"}function h(t){return isNaN(t)?isNaN(t)&&t.indexOf("%")!==-1?parseFloat(t.replace("%","")):void 0:t}function o(t){t._tweenObjectId||(t._tweenObjectId=p,p++);var i=d[t._tweenObjectId];return i||(i=d[t._tweenObjectId]=new g(t)),i}function r(){for(var t=0;t=this.time&&(this._ready=!0,delete this.parent.tweens[this.key],Object.keys(this.parent.tweens).length||(this.parent.active=!1,delete D[this.obj._tweenObjectId]),this.callback())};var _=function(){this._ready=!1,this.parent=null,this.obj=null,this.key="",this.from=0,this.to=0,this.time=0,this.ease=0,this.currentTime=0,this.t=0};_.prototype.set=function(t,i,e,o,r,u){this.parent=t,this.obj=t.object,this.key=i,this.surfix=s(o),this.to=h(o),this.from=n(e,o,this.obj,i),this.time=r,this.currentTime=0,this.ease=u,this._ready=!1,this.parent.active||(this.parent.active=!0,D[this.obj._tweenObjectId]=this.parent)},_.prototype.update=function(t){this.currentTime+=t,this.t=Math.min(this.currentTime,this.time)/this.time,this.ease&&(this.t=this.ease.getPosition(this.t));var i=a.Lerp(this.from,this.to,this.t);this.obj[this.key]=this.surfix?i+this.surfix:i,this.currentTime>=this.time&&(this._ready=!0,delete this.parent.tweens[this.key],Object.keys(this.parent.tweens).length||(this.parent.active=!1,delete D[this.obj._tweenObjectId]))};var v=["width","minWidth","maxWidth","anchorLeft","anchorRight","left","right","x"],m=["height","minHeight","maxHeight","anchorTop","anchorBottom","top","bottom","y"],x={to:function(t,i,e,n){var s=o(t);for(var h in e)if("onComplete"!==h){if(i){if(e[h]==t[h]||"undefined"==typeof t[h])continue;s.tweens[h]||(s.tweens[h]=r()),s.tweens[h].set(s,h,t[h],e[h],i,n)}}else{var a=u();a.set(s,e[h],i),s.tweens[a.key]=a}i||this.set(t,e)},from:function(t,i,e,n){var s=o(t);for(var h in e)if("onComplete"!==h){if(i){if(e[h]==t[h]||"undefined"==typeof t[h])continue;s.tweens[h]||(s.tweens[h]=r()),s.tweens[h].set(s,h,e[h],t[h],i,n)}}else{var a=u();a.set(s,e[h],i),s.tweens[a.key]=a}i||this.set(t,e)},fromTo:function(t,i,e,n,s){var h=o(t);for(var a in n)if("onComplete"!==a){if(i){if(e[a]==n[a]||"undefined"==typeof t[a]||"undefined"==typeof e[a])continue;h.tweens[a]||(h.tweens[a]=r()),h.tweens[a].set(h,a,e[a],n[a],i,s)}}else{var l=u();l.set(h,n[a],i),h.tweens[l.key]=l}i||this.set(t,n)},set:function(t,i){var e=o(t);for(var n in i)i[n]!=t[n]&&"undefined"!=typeof t[n]&&(e.tweens[n]&&delete e.tweens[n],t[n]=i[n])},_update:function(t){for(var i in D){var e=D[i];for(var n in e.tweens)e.tweens[n].update(t)}}};i.exports=x},{"./Ease/Ease":8,"./MathHelper":18}],31:[function(t,i,e){var n={Stage:t("./Stage"),Container:t("./Container"),ScrollingContainer:t("./ScrollingContainer"),SortableList:t("./SortableList"),Sprite:t("./Sprite"),TilingSprite:t("./TilingSprite"),SliceSprite:t("./SliceSprite"),Slider:t("./Slider"),ScrollBar:t("./ScrollBar"),Text:t("./Text"),DynamicText:t("./DynamicText/DynamicText"),DynamicTextStyle:t("./DynamicText/DynamicTextStyle"),TextInput:t("./TextInput"),Button:t("./Button"),CheckBox:t("./CheckBox"),MathHelper:t("./MathHelper"),Tween:t("./Tween"),Ease:t("./Ease/Ease"),Interaction:t("./Interaction/Interaction"),Ticker:t("./Ticker").shared};i.exports=n},{"./Button":2,"./CheckBox":3,"./Container":4,"./DynamicText/DynamicText":6,"./DynamicText/DynamicTextStyle":7,"./Ease/Ease":8,"./Interaction/Interaction":16,"./MathHelper":18,"./ScrollBar":19,"./ScrollingContainer":20,"./SliceSprite":21,"./Slider":22,"./SortableList":23,"./Sprite":24,"./Stage":25,"./Text":26,"./TextInput":27,"./Ticker":28,"./TilingSprite":29,"./Tween":30}],32:[function(t,i,e){function n(t,i){PIXI.utils.EventEmitter.call(this),this.container=new PIXI.Container,this.setting=new s,this.children=[],this.parent=null,this.stage=null,this.initialized=!1,this.dragInitialized=!1,this.dropInitialized=!1,this.dirty=!0,this._oldWidth=-1,this._oldHeight=-1,this.pixelPerfect=!0,t&&isNaN(t)&&t.indexOf("%")!=-1?this.setting.widthPct=.01*parseFloat(t.replace("%","")):this.setting.widthPct=null,i&&isNaN(i)&&i.indexOf("%")!=-1?this.setting.heightPct=.01*parseFloat(i.replace("%","")):this.setting.heightPct=null,this.setting.width=t||0,this.setting.height=i||0,this._width=0,this._height=0,this._minWidth=null,this._minHeight=null,this._maxWidth=null,this._maxHeight=null,this._anchorLeft=null,this._anchorRight=null,this._anchorTop=null,this._anchorBottom=null,this._left=null,this._right=null,this._top=null,this._bottom=null,this._dragPosition=null}var s=t("./UISettings"),h=(t("./UI"),t("./Interaction/DragEvent")),o=t("./Interaction/DragDropController");n.prototype=Object.create(PIXI.utils.EventEmitter.prototype),n.prototype.constructor=n,i.exports=n,n.prototype.updatesettings=function(t,i){if(!this.initialized){if(null===this.parent||null===this.parent.stage||!this.parent.initialized)return;this.initialize()}i&&this.updateParent(),this.baseupdate(),this.update(),t&&this.updateChildren()},n.prototype.update=function(){},n.prototype.updateParent=function(){null!==this.parent&&this.parent.updatesettings&&this.parent.updatesettings(!1,!0)},n.prototype.baseupdate=function(){if(null!==this.parent){var t,i;this.dirty=!0,this._width=this.actual_width,this._height=this.actual_height,this._minWidth=this.actual_minWidth,this._minHeight=this.actual_minHeight,this._maxWidth=this.actual_maxWidth,this._maxHeight=this.actual_maxHeight,this._anchorLeft=this.actual_anchorLeft,this._anchorRight=this.actual_anchorRight,this._anchorTop=this.actual_anchorTop,this._anchorBottom=this.actual_anchorBottom,this._left=this.actual_left,this._right=this.actual_right,this._top=this.actual_top,this._bottom=this.actual_bottom,this._parentWidth=i=this.parent._width,this._parentHeight=t=this.parent._height,this.dirty=!1;var e=this.pivotX*this._width,n=this.pivotY*this._height;if(this.pixelPerfect&&(e=Math.round(e),n=Math.round(n)),null===this.horizontalAlign){null!==this._anchorLeft&&null===this._anchorRight&&null!==this._right?this._anchorRight=this._right:null===this._anchorLeft&&null!==this._anchorRight&&null!==this._left?this._anchorLeft=this._left:null===this._anchorLeft&&null===this._anchorRight&&null!==this._left&&null!==this._right&&(this._anchorLeft=this._left,this._anchorRight=this._right);var s=null!==this._anchorLeft||null!==this._anchorRight,h=!s&&(null!==this._left||null!==this._right);h?null!==this._left?this.container.position.x=this._left:null!==this._right&&(this.container.position.x=i-this._right):s?(null!==this._anchorLeft&&null===this._anchorRight?this.container.position.x=this._anchorLeft:null===this._anchorLeft&&null!==this._anchorRight?this.container.position.x=i-this._width-this._anchorRight:null!==this._anchorLeft&&null!==this._anchorRight&&(this.container.position.x=this._anchorLeft,this._width=i-this._anchorLeft-this._anchorRight),this.container.position.x+=e):this.container.position.x=0}if(null===this.verticalAlign){null!==this._anchorTop&&null===this._anchorBottom&&null!==this._bottom&&(this._anchorBottom=this._bottom),null===this._anchorTop&&null!==this._anchorBottom&&null!==this._top&&(this._anchorTop=this._top);var o=null!==this._anchorTop||null!==this._anchorBottom,r=!o&&(null!==this._top||null!==this._bottom);r?null!==this._top?this.container.position.y=this._top:null!==this._bottom&&(this.container.position.y=t-this._bottom):o?(null!==this._anchorTop&&null===this._anchorBottom?this.container.position.y=this._anchorTop:null===this._anchorTop&&null!==this._anchorBottom?this.container.position.y=t-this._height-this._anchorBottom:null!==this._anchorTop&&null!==this._anchorBottom&&(this.container.position.y=this._anchorTop,this._height=t-this._anchorTop-this._anchorBottom),this.container.position.y+=n):this.container.position.y=0}null!==this._maxWidth&&this._width>this._maxWidth&&(this._width=this._maxWidth),this._widththis._maxHeight&&(this._height=this._maxHeight),this._height1)for(var e=0;e1)for(var e=0;eF)for(t=F;tthis._height&&"hidden"===t.overflowY)break;k.newline&&(B=!1),k.space||k.newline?h++:k.wordIndex=h,a=Math.max(a,t.fontSize),k.lineIndex=l,t.align!==o.align&&(d=t.align),k.space&&(g=i,f=n.x);var A=Math.round(k.data.width)+s(t.letterSpacing,0);if(!e&&!v&&!k.newline&&n.x+A>this._width){if(t.wrap)if(k.space)v=!0;else{if(g!==-1){m-=i-g,i=g-1,g=-1,n.x=f,v=!0;continue}if(t.breakWords){T&&(n.x-=T.style.letterSpacing,n.x-=T.data.width),i-=2,m--,v=!0;continue}}if("hidden"==t.overflowX&&!v&&(B=!0,t.ellipsis&&!P)){P=!0;var S=I[l];S||(S=I[l]=[new c,new c,new c]);for(var M=0;M<3;M++){var L=S[M];L.value=".",L.data=D.getCharObject(L.value,t),L.style=t,L.x=n.x+k.data.xOffset,L.y=parseFloat(t.verticalAlign)+L.data.yOffset,L.lineIndex=l,n.x+=Math.round(L.data.width)+s(t.letterSpacing,0),p[m]=L,m++}}}B||(k.x=n.x+k.data.xOffset,k.y=parseFloat(t.verticalAlign)+k.data.yOffset,n.x+=A,p[m]=k,m++),(v||k.newline||i===E-1)&&(T&&(n.x-=T.style.letterSpacing,T.space&&(n.x-=T.data.width)),k.space&&(n.x-=k.data.width,n.x-=s(t.letterSpacing,0)),_+=r,b[l]=P,x[l]=n.x,C[l]=r,w[l]=a,y[l]=d,r=n.x=f=a=0,d=o.align,g=-1,l++,v=B=P=!1)}F=m};var P=["","","","
"];this.processInputText=function(){for(var t=[o],e=0,s=0,h=Array.from(this._inputText),r=0;r")+1);var _=!0;if(f.length){if(""===f)style=style.clone(),style.fontStyle="italic",t.push(style);else if(""===f)style=style.clone(),style.fontWeight="bold",t.push(style);else if("
"===f)style=style.clone(),style.align="center",t.push(style);else if(P.indexOf(f)!==-1)t.length>1&&t.splice(t.length-1,1);else if(f.startsWith("\s]*)(?=\s|\/>))(?=[^<]*>)/g,m=v.exec(f);if(null!==m){for(style=style.clone();null!==m;){switch(m[1]){case"family":m[1]="fontFamily";break;case"size":m[1]="fontSize";break;case"weight":m[1]="fontWeight";break;case"style":m[1]="fontStyle";break;case"valign":m[1]="verticalAlign";break;case"spacing":m[1]="letterSpacing";break;case"color":m[1]="tint"}style[m[1]]=m[4],m=v.exec(f)}t.push(style)}}else _=!1;if(_){s+=f.length,r+=f.length-1;continue}}}else{var x=d().exec(a);if(null!==x){for(r--,a="";null!==x&&a!==x[0];)r++,a=x[0],x=d().exec(a+h[r+1]);g=!0}}var C=u[e];C||(C=new c,u[e]=C),C.style=style,g&&(C.style=C.style.clone(),C.style.fontFamily=n.settings.defaultEmojiFont),C.data=D.getCharObject(a,C.style),C.value=a,C.space=p,C.newline=l,C.emoji=g,e++,s+=a.length}E=e},this.lazyUpdate=null;var B=this;this.update=function(){null===B.lazyUpdate&&(B.lazyUpdate=setTimeout(function(){console.log("UPDATING TEXT");var t=!e&&(B._width!=v||B._height!=m||B.dirtyText);(B.dirtyText||B.dirtyStyle)&&(B.dirtyText=B.dirtyStyle=!1,B.dirtyRender=!0,B.processInputText()),(t||B.dirtyRender)&&(B.dirtyRender=!1,v=B._width,m=B.height,B.prepareForRender(),B.render()),B.lazyUpdate=null},0))}}function s(t,i){return isNaN(t)?i:parseFloat(t)}function h(t,i){return isNaN(t)?i:parseInt(t)}function o(t,i){return"string"==typeof t&&t.length?t:i}function r(t,i){if("number"==typeof t)return t;var e=parseInt(t.replace("#","0x"));return isNaN(e)?i:e}function u(t,i){var e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return i=s(i,1),!!e&&"rgba("+parseInt(e[1],16)+","+parseInt(e[2],16)+","+parseInt(e[3],16)+","+i+")"}var a=t("../UIBase"),l=t("./DynamicTextStyle"),c=t("./DynamicChar"),d=t("emoji-regex"),D=null;n.prototype=Object.create(a.prototype),n.prototype.constructor=n,i.exports=n,n.settings={debugSpriteSheet:!1,defaultEmojiFont:"Segoe UI Emoji"},Object.defineProperties(n.prototype,{value:{get:function(){return this._inputText},set:function(t){t!==this._inputText&&(this._inputText=t,this.dirtyText=!0,this.update(),console.log("Updating Text to: "+t))}},text:{get:function(){return this.value},set:function(t){this.value=t}},style:{get:function(){return this._style},set:function(t){var i=new l(this);i.merge(t),this._style.merge(i),this.dirtyStyle=!0,this.update()}}});var p=document.createElement("canvas"),g=p.getContext("2d");p.width=100,p.height=100;var f=function(t){var i,e,r,a,l,c,d,D=(devicePixelRatio||1,[]),f=[],_=256,v=2048,m=function(t,i){var e=this.children=[];this.rect=new PIXI.Rectangle(0,0,t||0,i||0),this.data=null,this.insert=function(t,i,n){if(e.length>0){var s=e[0].insert(t,i,n);return null!==s?s:e[1].insert(t,i,n)}if(null!==this.data)return null;if(t>this.rect.width||i>this.rect.height)return null;if(t==this.rect.width&&i==this.rect.height)return this.data=n,n.frame.x=this.rect.x,n.frame.y=this.rect.y,this;e.push(new m),e.push(new m);var h=this.rect.width-t,o=this.rect.height-i;return h>o?(e[0].rect=new PIXI.Rectangle(this.rect.x,this.rect.y,t,this.rect.height),e[1].rect=new PIXI.Rectangle(this.rect.x+t,this.rect.y,this.rect.width-t,this.rect.height)):(e[0].rect=new PIXI.Rectangle(this.rect.x,this.rect.y,this.rect.width,i),e[1].rect=new PIXI.Rectangle(this.rect.x,this.rect.y+i,this.rect.width,this.rect.height-i)),e[0].insert(t,i,n)}},x=function(){i=document.createElement("canvas"),e=i.getContext("2d"),f.push(i),d=_,i.width=i.height=d,c=new m(d,d),r=[],a=PIXI.BaseTexture.fromCanvas(i),a.mipmap=!1,a.resolution=1,a.update(),n.settings.debugSpriteSheet&&(i.className="DynamicText_SpriteSheet",document.body.appendChild(i))};this.fontFamilyCache={};var C=function(t,i){i&&a.update();for(var e=0;ei.frame.height?-1:t.frame.widthi.frame.width?-1:0},F=function(){D.sort(y);for(var i=!1,e=!1,n=0;n0&&!C[w];)w-=4;var I=w/y|0;for(w=3;w=F&&(w=w-F+4);var b=w%y/4|0,P=1;for(w=F-1;w>=0&&!C[w];)w-=y,w<0&&(w=F-1-4*P++);var B=w%y/4+1|0;r.ascent=Math.round(f-E),r.descent=Math.round(I-f),r.height=1+Math.round(I-E),r.bounds={minx:b-c,maxx:B-c,miny:0,maxy:I-E},r.rect={x:r.bounds.minx,y:-r.ascent-2,width:r.bounds.maxx-r.bounds.minx+2,height:r.ascent+r.descent+4},r.canvas=document.createElement("canvas"),r.canvas.width=r.rect.width,r.canvas.height=r.rect.height;var k=r.canvas.getContext("2d");k.drawImage(p,-c-r.rect.x,-f-r.rect.y),r.rect.x=r.rect.y=0}return r};x()}},{"../UIBase":32,"./DynamicChar":5,"./DynamicTextStyle":7,"emoji-regex":1}],7:[function(t,i,e){function n(t){this.respectDirty=!0,this._parent=t||null,this._scale=1,this._align="left",this._fontFamily="Arial",this._fontSize=26,this._fontWeight="normal",this._fontStyle="normal",this._letterSpacing=0,this._lineHeight=0,this._verticalAlign=0,this._rotation=0,this._skew=0,this._tint="#FFFFFF",this._fill="#FFFFFF",this._shadow="",this._stroke=0,this._strokeFill="",this._strokeShadow="",this._wrap=!0,this._breakWords=!1,this._overflowX="visible",this._overflowY="visible",this._ellipsis=!1;var i=null;this.ellipsisSize=function(t){return this.ellipsis?(null===i&&(i=3*(t.getCharObject(".",this).width+this.letterSpacing)),i):0}}n.prototype.clone=function(){var t=new n;return t.merge(this),t},n.prototype.merge=function(t){if("object"==typeof t){this.respectDirty=!1;for(var i in t){var e=t[i];"function"!=typeof e&&"respectDirty"!==i&&"_parent"!==i&&(this[i]=t[i])}this.respectDirty=!0,this._dirty=!0}},n.prototype.ctxKey=function(t){return[t,this.fill,this.shadow,this.stroke,this.strokeFill,this.strokeShadow].join("|")},n.prototype.ctxFont=function(){var t=Math.min(200,Math.max(1,this.fontSize||26))+"px ",i="bold"===this.fontWeight?this.fontWeight+" ":"",e="italic"===this.fontStyle||"oblique"===this.fontStyle?this.fontStyle+" ":"";return i+e+t+this.fontFamily},n.prototype.constructor=n,i.exports=n,Object.defineProperties(n.prototype,{_dirty:{set:function(t){this.respectDirty&&null!==this._parent&&(this._parent.dirtyStyle=t,this._parent.update())}},scale:{get:function(){return this._scale},set:function(t){t!==this._scale&&(this._scale=t,this._dirty=!0)}},align:{get:function(){return this._align},set:function(t){t!==this._align&&(this._align=t,this._dirty=!0)}},fontFamily:{get:function(){return this._fontFamily},set:function(t){t!==this._fontFamily&&(this._fontFamily=t,this._dirty=!0)}},fontSize:{get:function(){return this._fontSize},set:function(t){t!==this._fontSize&&(this._fontSize=t,this._dirty=!0)}},fontWeight:{get:function(){return this._fontWeight},set:function(t){t!==this._fontWeight&&(this._fontWeight=t,this._dirty=!0)}},fontStyle:{get:function(){return this._fontStyle},set:function(t){t!==this._fontStyle&&(this._fontStyle=t,this._dirty=!0)}},letterSpacing:{get:function(){return this._letterSpacing},set:function(t){t!==this._letterSpacing&&(this._letterSpacing=t,this._dirty=!0)}},lineHeight:{get:function(){return this._lineHeight},set:function(t){t!==this._lineHeight&&(this._lineHeight=t,this._dirty=!0)}},verticalAlign:{get:function(){return this._verticalAlign},set:function(t){t!==this._verticalAlign&&(this._verticalAlign=t,this._dirty=!0)}},rotation:{get:function(){return this._rotation},set:function(t){t!==this._rotation&&(this._rotation=t,this._dirty=!0)}},skew:{get:function(){return this._skew},set:function(t){t!==this._skew&&(this._skew=t,this._dirty=!0)}},tint:{get:function(){return this._tint},set:function(t){t!==this._tint&&(this._tint=t,this._dirty=!0)}},fill:{get:function(){return this._fill},set:function(t){t!==this._fill&&(this._fill=t,this._dirty=!0)}},shadow:{get:function(){return this._shadow},set:function(t){t!==this._shadow&&(this._shadow=t,this._dirty=!0)}},stroke:{get:function(){return this._stroke},set:function(t){t!==this._stroke&&(this._stroke=t,this._dirty=!0)}},strokeFill:{get:function(){return this._strokeFill},set:function(t){t!==this._strokeFill&&(this._strokeFill=t,this._dirty=!0)}},strokeShadow:{get:function(){return this._strokeShadow},set:function(t){t!==this._strokeShadow&&(this._strokeShadow=t,this._dirty=!0)}},wrap:{get:function(){return this._wrap},set:function(t){t!==this._wrap&&(this._wrap=t,this._dirty=!0)}},breakWords:{get:function(){return this._breakWords},set:function(t){t!==this._breakWords&&(this._breakWords=t,this._dirty=!0)}},overflowX:{get:function(){return this._overflowX},set:function(t){t!==this._overflowX&&(this._overflowX=t,this._dirty=!0)}},overflowY:{get:function(){return this._overflowY},set:function(t){t!==this._overflowY&&(this._overflowY=t,this._dirty=!0)}},ellipsis:{get:function(){return this._ellipsis},set:function(t){t!==this._ellipsis&&(this._ellipsis=t,this._dirty=!0)}}})},{}],8:[function(t,i,e){function n(t){var i=Object.create(o.prototype);return i.getPosition=t,i}function s(t,i,e){return{easeIn:t,easeOut:i,easeInOut:e}}var h={},o=t("./EaseBase"),r=t("./ExponentialEase"),u=.5*Math.PI;h.Linear=new o,h.Power0={easeNone:h.Linear},h.Power1=h.Quad=s(new r(1,1,0),new r(1,0,1),new r(1,1,1)),h.Power2=h.Cubic=s(new r(2,1,0),new r(2,0,1),new r(2,1,1)),h.Power3=h.Quart=s(new r(3,1,0),new r(3,0,1),new r(3,1,1)),h.Power4=h.Quint=s(new r(4,1,0),new r(4,0,1),new r(4,1,1)),h.Bounce={BounceIn:n(function(t){return(t=1-t)<1/2.75?1-7.5625*t*t:t<2/2.75?1-(7.5625*(t-=1.5/2.75)*t+.75):t<2.5/2.75?1-(7.5625*(t-=2.25/2.75)*t+.9375):1-(7.5625*(t-=2.625/2.75)*t+.984375)}),BounceOut:n(function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}),BounceInOut:n(function(t){var i=t<.5;return t=i?1-2*t:2*t-1,t=t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375,i?.5*(1-t):.5*t+.5})},h.Circ={CircIn:n(function(t){return-(Math.sqrt(1-t*t)-1)}),CircOut:n(function(t){return Math.sqrt(1-(t-=1)*t)}),CircInOut:n(function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)})},h.Expo={ExpoIn:n(function(t){return Math.pow(2,10*(t-1))-.001}),ExpoOut:n(function(t){return 1-Math.pow(2,-10*t)}),ExpoInOut:n(function(t){return(t*=2)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*(t-1)))})},h.Sine={SineIn:n(function(t){return-Math.cos(t*u)+1}),SineOut:n(function(t){return Math.sin(t*u)}),SineInOut:n(function(t){return-.5*(Math.cos(Math.PI*t)-1)})},i.exports=h},{"./EaseBase":9,"./ExponentialEase":10}],9:[function(t,i,e){function n(){this.getPosition=function(t){return t}}n.prototype.constructor=n,i.exports=n},{}],10:[function(t,i,e){function n(t,i,e){var n=t,s=i&&e?3:e?1:2;this.getPosition=function(t){var i=1===s?1-t:2===s?t:t<.5?2*t:2*(1-t);return 1===n?i*=i:2===n?i*=i*i:3===n?i*=i*i*i:4===n&&(i*=i*i*i*i),1===s?1-i:2===s?i:t<.5?i/2:1-i/2}}var s=t("./EaseBase");n.prototype=Object.create(s.prototype),n.prototype.constructor=n,i.exports=n},{"./EaseBase":9}],11:[function(t,i,e){function n(t,i,e,n){s.call(this,t,i);var o=this;this._focused=!1,this._useTab=this._usePrev=this._useNext=!0,this.container.interactive=!0,h.registrer(this,e,n);var r=function(t){9===t.which?o._useTab&&(h.fireTab(),t.preventDefault()):38===t.which?o._usePrev&&(h.firePrev(),t.preventDefault()):40===t.which&&o._useNext&&(h.fireNext(),t.preventDefault())},u=function(t){o.__down||o.blur()};this.container.on("pointerdown",function(t){o.focus(),o.__down=!0}),this.container.on("pointerup",function(t){o.__down=!1}),this.container.on("pointerupoutside",function(t){o.__down=!1}),this._bindEvents=function(){null!==this.stage&&(this.stage.on("pointerdown",u),document.addEventListener("keydown",r))},this._clearEvents=function(){null!==this.stage&&(this.stage.off("pointerdown",u),document.removeEventListener("keydown",r))}}var s=t("./UIBase"),h=t("./Interaction/InputController");t("./Interaction/ClickEvent");n.prototype=Object.create(s.prototype),n.prototype.constructor=n,i.exports=n,n.prototype.focus=function(){this._focused||(this._focused=!0,this._bindEvents(),h.set(this),this.emit("focusChanged",!0),this.emit("focus"))},n.prototype.blur=function(){this._focused&&(h.clear(),this._focused=!1,this._clearEvents(),this.emit("focusChanged",!1),this.emit("blur"))}},{"./Interaction/ClickEvent":12,"./Interaction/InputController":15,"./UIBase":32}],12:[function(t,i,e){var n=function(t){var i=!1,e=this,n=0,s=!1,h=new PIXI.Point,o=new PIXI.Point,r=0,u=0;t.container.interactive=!0;var a=function(s){h.copy(s.data.global),n=s.data.identifier,e.onPress.call(t,s,!0),i||(t.container.on("mouseup",c),t.container.on("mouseupoutside",d),t.container.on("touchend",c),t.container.on("touchendoutside",d),i=!0)},l=function(s){s.data.identifier===n&&(o.set(s.data.global.x-h.x,s.data.global.y-h.y),i&&(t.container.removeListener("mouseup",c),t.container.removeListener("mouseupoutside",d),t.container.removeListener("touchend",c),t.container.removeListener("touchendoutside",d),i=!1),e.onPress.call(t,s,!1))},c=function(i){i.data.identifier===n&&(l(i),r=Math.abs(o.x),u=Math.abs(o.y),Math.max(r,u)>t.dragThreshold||e.onClick.call(t,i))},d=function(t){t.data.identifier===n&&l(t)},D=function(i){s||(s=!0,e.onHover.call(t,i))},p=function(i){s&&(s=!1,e.onLeave.call(t,i))};this.stopEvent=function(){i&&(t.container.removeListener("mouseup",c),t.container.removeListener("mouseupoutside",d),t.container.removeListener("touchend",c),t.container.removeListener("touchendoutside",d),i=!1),t.container.removeListener("mousedown",a),t.container.removeListener("touchstart",a),t.container.removeListener("mouseover",D),t.container.removeListener("mouseout",p)},this.startEvent=function(){t.container.on("mousedown",a),t.container.on("touchstart",a),t.container.on("mouseover",D),t.container.on("mouseout",p)},this.startEvent()};n.prototype.constructor=n,i.exports=n,n.prototype.onHover=function(t){}, +n.prototype.onLeave=function(t){},n.prototype.onPress=function(t,i){},n.prototype.onClick=function(t){}},{}],13:[function(t,i,e){var n=[],s={add:function(t,i){return t._dragDropEventId=i.data.identifier,n.indexOf(t)===-1&&(n.push(t),!0)},getItem:function(t){for(var i,e=null,s=0;sh?r=!0:"y"==t.dragRestrictAxis&&o<=h&&(r=!0),r))return void D(i);a.onDragStart.call(t,i),u=!0}a.onDragMove.call(t,i,n)}},D=function(e){e.data.identifier===l&&i&&(t.stage.removeListener("mousemove",d),t.stage.removeListener("touchmove",d),t.stage.removeListener("mouseup",D),t.stage.removeListener("mouseupoutside",D),t.stage.removeListener("touchend",D),t.stage.removeListener("touchendoutside",D),t.stage.removeListener("touchcancel",D),u=!1,i=!1,a.onDragEnd.call(t,e),a.onPress.call(t,e,!1))};this.stopEvent=function(){i&&(t.stage.removeListener("mousemove",d),t.stage.removeListener("touchmove",d),t.stage.removeListener("mouseup",D),t.stage.removeListener("mouseupoutside",D),t.stage.removeListener("touchend",D),t.stage.removeListener("touchendoutside",D),i=!1),t.container.removeListener("mousedown",c),t.container.removeListener("touchstart",c)},this.startEvent=function(){t.container.on("mousedown",c),t.container.on("touchstart",c)},this.startEvent()};n.prototype.constructor=n,i.exports=n,n.prototype.onPress=function(t,i){},n.prototype.onDragEnd=function(t){},n.prototype.onDragMove=function(t,i){},n.prototype.onDragStart=function(t){}},{}],15:[function(t,i,e){var n,s={},h={},o={},r={registrer:function(t,i,e){var n=e||"default",h=s[n];h||(h=s[n]=[]);var o=h.indexOf(t);o===-1&&(t._tabIndex=void 0!==i?i:-1,t._tabGroup=h,h.push(t),h.sort(function(t,i){return t._tabIndexi._tabIndex?1:0}))},set:function(t){n&&"function"==typeof n.blur&&n.blur(),n=t},clear:function(){n=void 0},fireTab:function(){if(n){var t=n._tabGroup.indexOf(n)+1;t>=n._tabGroup.length&&(t=0),n._tabGroup[t].focus()}},fireNext:function(){if(n){var t=n._tabGroup.indexOf(n)+1;t>=n._tabGroup.length&&(t=n._tabGroup.length-1),n._tabGroup[t].focus()}},firePrev:function(){if(n){var t=n._tabGroup.indexOf(n)-1;t<0&&(t=0),n._tabGroup[t].focus()}},registrerCheckGroup:function(t){var i=t.checkGroup,e=h[i];e||(e=h[i]={}),e[t.value]=t,t.checked&&(o[i]=t.value)},updateCheckGroupSelected:function(t){var i=h[t.checkGroup];for(var e in i){var n=i[e];n!==t&&(n.checked=!1)}o[t.checkGroup]=t.value},getCheckGroupSelectedValue:function(t){return o[t]?o[t]:""},setCheckGroupSelectedValue:function(t,i){var e=h[t];if(e){var n=e[i];n&&(n.checked=!0)}}};i.exports=r},{}],16:[function(t,i,e){var n={ClickEvent:t("./ClickEvent"),DragEvent:t("./DragEvent"),MouseScrollEvent:t("./MouseScrollEvent")};i.exports=n},{"./ClickEvent":12,"./DragEvent":14,"./MouseScrollEvent":17}],17:[function(t,i,e){var n=function(t,i){var e=!1,n=new PIXI.Point,s=this;t.container.interactive=!0;var h=function(e){i&&e.preventDefault(),n.set(e.deltaX,e.deltaY),s.onMouseScroll.call(t,e,n)},o=function(t){e||(document.addEventListener("mousewheel",h,!1),document.addEventListener("DOMMouseScroll",h,!1),e=!0)},r=function(t){e&&(document.removeEventListener("mousewheel",h),document.removeEventListener("DOMMouseScroll",h),e=!1)};this.stopEvent=function(){e&&(document.removeEventListener("mousewheel",h),document.removeEventListener("DOMMouseScroll",h),e=!1),t.container.removeListener("mouseover",o),t.container.removeListener("mouseout",r)},this.startEvent=function(){t.container.on("mouseover",o),t.container.on("mouseout",r)},this.startEvent()};n.prototype.constructor=n,i.exports=n,n.prototype.onMouseScroll=function(t,i){}},{}],18:[function(t,i,e){var n={Lerp:function(t,i,e){return e>1?e=1:e<0&&(e=0),t+(i-t)*e},Round:function(t,i){var e=Math.pow(10,i);return Math.round(t*e)/e}};i.exports=n},{}],19:[function(t,i,e){function n(t){s.call(this,{track:t.track,handle:t.handle,fill:null,vertical:t.vertical}),this.scrollingContainer=t.scrollingContainer,this.autohide=t.autohide,this._hidden=!1}var s=t("./Slider"),h=t("./Tween");t("./Ease/Ease");n.prototype=Object.create(s.prototype),n.prototype.constructor=n,i.exports=n,n.prototype.initialize=function(){s.prototype.initialize.call(this),this.decimals=3,this._onValueChanging=function(t){var i=this.scrollingContainer._height/this.scrollingContainer.innerContainer.height||.001;i<1&&this.scrollingContainer.forcePctPosition(this.vertical?"y":"x",this._amt)},this.scrollingContainer._scrollBars.push(this)},n.prototype.alignToContainer=function(){var t,i,e=this.vertical?"y":"x",n=this.vertical?"height":"width",s=this.vertical?"top":"left",h=this.scrollingContainer.innerContainer[n]?-(this.scrollingContainer.innerContainer[e]/this.scrollingContainer.innerContainer[n]):0,o=this.scrollingContainer.innerContainer[n]?this.scrollingContainer["_"+n]/this.scrollingContainer.innerContainer[n]:1;this._amt=this.scrollingContainer["_"+n]?-(this.scrollingContainer.innerContainer[e]/(this.scrollingContainer.innerContainer[n]-this.scrollingContainer["_"+n])):0,o>=1?(i=this["_"+n],this.handle[s]=.5*i,this.toggleHidden(!0)):(i=this["_"+n]*o,this._amt>1?i-=(this["_"+n]-i)*(this._amt-1):this._amt<0&&(i-=(this["_"+n]-i)*-this._amt),t=this._amt<0?.5*i:this._amt>1?this["_"+n]-.5*i:h*this.scrollingContainer["_"+n]+.5*i,this.handle[s]=t,this.toggleHidden(!1)),this.handle[n]=i},n.prototype.toggleHidden=function(t){this.autohide&&(t&&!this._hidden?(h.to(this,.2,{alpha:0}),this._hidden=!0):!t&&this._hidden&&(h.to(this,.2,{alpha:1}),this._hidden=!1))}},{"./Ease/Ease":8,"./Slider":22,"./Tween":30}],20:[function(t,i,e){function n(t){t=t||{},s.call(this,t.width,t.height),this.mask=new PIXI.Graphics,this.innerContainer=new PIXI.Container,this.innerBounds=new PIXI.Rectangle,this.container.addChild(this.mask),this.container.addChild(this.innerContainer),this.container.mask=this.mask,this.scrollX=void 0!==t.scrollX&&t.scrollX,this.scrollY=void 0===t.scrollY||t.scrollY,this.dragScrolling=void 0===t.dragScrolling||t.dragScrolling,this.softness=void 0!==t.softness?Math.max(Math.min(t.softness||0,1),0):.5,this.radius=t.radius||0,this.expandMask=t.expandMask||0,this.overflowY=t.overflowY||0,this.overflowX=t.overflowX||0,this.animating=!1,this.scrolling=!1,this._scrollBars=[],this.boundCached=performance.now()-1e3}var s=(t("./UIBase"),t("./Container")),h=t("./MathHelper"),o=t("./Ticker"),r=t("./Interaction/DragEvent"),u=t("./Interaction/MouseScrollEvent");n.prototype=Object.create(s.prototype),n.prototype.constructor=n,i.exports=n,n.prototype.initialize=function(){s.prototype.initialize.apply(this),(this.scrollX||this.scrollY)&&this.initScrolling()},n.prototype.update=function(){if(s.prototype.update.apply(this),this._lastWidth!=this._width||this._lastHeight!=this._height){var t=this.expandMask;this.mask.clear(),this.mask.lineStyle(0),this.mask.beginFill(16777215,1),0===this.radius?this.mask.drawRect(-t,-t,this._width+t,this._height+t):this.mask.drawRoundedRect(-t,-t,this._width+t,this.height+t,this.radius),this.mask.endFill(),this._lastWidth=this._width,this._lastHeight=this._height}this.setScrollPosition&&this.setScrollPosition()},n.prototype.addChild=function(t){var i=arguments.length;if(i>1)for(var e=0;e1e3)&&(this.innerContainer.getLocalBounds(this.innerBounds),this.innerContainer.getLocalBounds(this.innerBounds),this.innerBounds.height=this.innerBounds.y+this.innerContainer.height,this.innerBounds.width=this.innerBounds.x+this.innerContainer.width,this.boundCached=performance.now()),this.innerBounds},n.prototype.initScrolling=function(){var t,i=this.innerContainer,e=new PIXI.Point,n=new PIXI.Point,s=new PIXI.Point,a=new PIXI.Point,l=new PIXI.Point,c=this;if(this.forcePctPosition=function(t,e){var s=this.getInnerBounds();this.scrollX&&"x"==t&&(i.position[t]=-((s.width-this._width)*e)),this.scrollY&&"y"==t&&(i.position[t]=-((s.height-this._height)*e)),a[t]=n[t]=i.position[t]},this.focusPosition=function(t){var e,h=this.getInnerBounds();if(this.scrollX){var o=Math.max(0,Math.min(h.width,t.x));o+i.x>this._width?(e=o-this._width,i.x=-e):o+i.x<0&&(e=o+i.x,i.x-=e)}if(this.scrollY){var r=Math.max(0,Math.min(h.height,t.y));r+i.y>this._height?(e=r-this._height,i.y=-e):r+i.y<0&&(e=r+i.y,i.y-=e)}s.copy(i.position),n.copy(i.position),a.copy(i.position),this.updateScrollBars()},this.setScrollPosition=function(t){t&&(l=t),this.animating||(this.animating=!0,s.copy(i.position),n.copy(i.position),o.on("update",this.updateScrollPosition,this))},this.updateScrollPosition=function(i){t=!0,this.scrollX&&this.updateDirection("x",i),this.scrollY&&this.updateDirection("y",i),t&&(o.removeListener("update",this.updateScrollPosition),this.animating=!1)},this.updateDirection=function(e,o){var r,u=this.getInnerBounds();if(r="y"==e?Math.round(Math.min(0,this._height-u.height)):Math.round(Math.min(0,this._width-u.width)),this.scrolling||0===Math.round(l[e])||(n[e]+=l[e],l[e]=h.Lerp(l[e],0,(5+2.5/Math.max(this.softness,.01))*o),n[e]>0?n[e]=0:n[e]0||i[e]0?0:r;a[e]=h.Lerp(a[e],d,(40-30*this.softness)*o),t=!1}else(this.scrolling||0!==Math.round(l[e]))&&(this.scrolling&&(l[e]=a[e]-s[e],s.copy(a)),n[e]>0?(l[e]=0,a[e]=100*this.softness*(1-Math.exp(n[e]/-200))):n[e]1)for(var i=0;ie._sortListValue()?i?-1:1:0;return 0===n&&t._sortListThenByValue&&e._sortListThenByValue&&(n=t._sortListThenByValue()e._sortListThenByValue()?i?-1:1:0),0===n&&(n=t._sortListRnd>e._sortListRnd?1:t._sortListRnd0?h.fromTo(o,this.tweenTime,{x:o.x,y:o.y},{x:0,y:e},this.tweenEase):(o.x=0,o.y=e),e+=o.height,"function"==typeof o.altering&&o.altering(n)}this.tweenTime>0&&setTimeout(function(){t.updatesettings(!1,!0)},1e3*this.tweenTime)}},{"./Container":4,"./Tween":30}],24:[function(t,i,e){function n(t){this.sprite=new PIXI.Sprite(t),s.call(this,this.sprite.width,this.sprite.height),this.container.addChild(this.sprite)}var s=t("./UIBase");n.prototype=Object.create(s.prototype),n.prototype.constructor=n,i.exports=n,n.fromFrame=function(t){return new n(new PIXI.Texture.fromFrame(t))},n.fromImage=function(t){return new n(new PIXI.Texture.fromImage(t))},n.prototype.update=function(){null!==this.tint&&(this.sprite.tint=this.tint),null!==this.blendMode&&(this.sprite.blendMode=this.blendMode),this.sprite.width=this._width,this.sprite.height=this._height}},{"./UIBase":32}],25:[function(t,i,e){function n(t,i){PIXI.Container.call(this),this.__width=t,this.__height=i,this.minWidth=0,this.minHeight=0,this.UIChildren=[],this.stage=this,this.interactive=!0,this.hitArea=new PIXI.Rectangle(0,0,0,0),this.initialized=!0}t("./UIBase");n.prototype=Object.create(PIXI.Container.prototype),n.prototype.constructor=n,i.exports=n,n.prototype.addChild=function(t){var i=arguments.length;if(i>1)for(var e=0;e1)for(var e=0;en&&e>1?(this.scale.set(1/e),this.__height*=e,this.__width*=e):n>1?(this.scale.set(1/n),this.__width*=n,this.__height*=n):1!==this.scale.x&&this.scale.set(1)}this.hitArea.width=this.__width,this.hitArea.height=this.__height;for(var s=0;sh){for(u=e.length-1;u>=h;u--)m.removeChild(e[u]),e[u].destroy();e.splice(h,e.length-h)}var a=!1,d=!1,f=0,_=-1,x=!1;for(u=0;u=i._width-p-g)||(s++,o=0,r+=c,_==-1||d)?(w.lineIndex=s,w.x=o,w.y=r,w.wordIndex=a||d?-1:f,o+=w.width,o>L&&(L=o),r>X&&(X=r)):(u=_-1,_=-1,x=!0)}O=s,m.addChild(D),m.cacheAsBitmap&&(m.cacheAsBitmap=!1,m.cacheAsBitmap=!0),v.update()},V=function(t,i){var n,s=99999,h=-1,o=!1,r=0;O>0&&(r=Math.max(0,Math.min(O,Math.floor(t.y/c))));for(var u=0;ua.x+.5*a.width)}}i?(C=h,w=o):(y=h,F=o)},G=function(){return!!A&&(i.value=i.value.slice(0,k)+i.value.slice(T+1),i.setCaretIndex(k),!0)},U=function(){for(var t=0;t=k&&t<=T?e[t].style.fill=r:e[t].style.fill=o},Y=new PIXI.Point,q=function(t){Y.copy(t),n&&Y.y>=c&&(Y.y+=c),v.focusPosition(Y)},Q=function(){Y.set(0,0),v.focusPosition(Y)},K=function(){D.visible=!1,clearInterval(x)},$=function(){i.clearSelection(),clearInterval(x),D.alpha=1,D.visible=!0,x=setInterval(function(){D.alpha=0===D.alpha?1:0},500)},J=function(t){if(A&&G(),!i.maxLength||e.length0||1===e.length&&D._atEnd)&&(D._atEnd?(i.value=i.value.slice(0,e.length-1),i.setCaretIndex(D._index)):(i.value=i.value.slice(0,D._index-1)+i.value.slice(D._index),i.setCaretIndex(D._index-1))),void t.preventDefault();if(46===t.which)return G()||D._atEnd||(i.value=i.value.slice(0,D._index)+i.value.slice(D._index+1),i.setCaretIndex(D._index)),void t.preventDefault();if(37===t.which||39===t.which){if(P=37===t.which,H)if(A){var s=k===D._index;if(s)if(k===T&&P===D._forward)i.setCaretIndex(D._forward?D._index:D._index+1);else{var h=P?D._index-1:D._index+1;i.selectRange(h,T),D._index=Math.min(e.length-1,Math.max(0,h))}else{var o=P?D._index-1:D._index+1;i.selectRange(k,o),D._index=Math.min(e.length-1,Math.max(0,o))}}else{var r=D._atEnd?D._index+1:D._index,u=P?r-1:r;i.selectRange(u,u),D._index=u,D._forward=!P}else A?i.setCaretIndex(P?k:T+1):i.setCaretIndex(D._index+(P?D._atEnd?0:-1:1));return void t.preventDefault()}return!n||38!==t.which&&40!==t.which?void 0:(B=38===t.which,H?A?(b.y=Math.max(0,Math.min(X,b.y+(B?-c:c))),V(b,!1),console.log(C,y),Math.abs(C-y)<=1?(console.log(C,y),i.setCaretIndex(w?C+1:C)):(D._index=(F?y+1:y)+(D._down?-1:0),i.selectRange(D._down?C:C-1,D._index))):(C=D._index,w=!1,b.copy(D),b.y=Math.max(0,Math.min(X,b.y+(B?-c:c))),V(b,!1),D._index=(F?y+1:y)-(B?0:1),i.selectRange(B?C-1:C,D._index),D._down=!B):A?i.setCaretIndex(B?k:T+1):(I.copy(D),I.y+=B?-c:c,I.x+=1,V(I,!0),i.setCaretIndex(w?C+1:C)),void t.preventDefault())},tt=function(t){t.which!=j&&t.which!=W||(R=!1),t.which===N&&(H=!1)},it=function(t){if(A){var e=t.clipboardData||window.clipboardData;e.setData("Text",i.value.slice(k,T+1))}t.preventDefault()},et=function(t){A&&(it(t),G()),t.preventDefault()},nt=function(t){var i=t.clipboardData||window.clipboardData;J(i.getData("Text")),t.preventDefault()},st=function(t){J(t.data),t.preventDefault()},ht=function(t){i.blur()},ot=new h(this);ot.onPress=function(t,n){if(n){var s=performance.now()-S;if(S=performance.now(),s<250)if(M++,M>1)this.select();else{m.toLocal(E,void 0,I,!0),V(I,!0);var h=e[C];h&&(h.wordIndex!=-1?this.selectWord(h.wordIndex):this.selectRange(C,C))}else M=0,E.copy(t.data.global),m.toLocal(E,void 0,I,!0),e.length&&(V(I,!0),i.setCaretIndex(w?C+1:C))}t.data.originalEvent.preventDefault()},ot.onDragMove=function(t,n){e.length&&this._focused&&(b.x=E.x+n.x,b.y=E.y+n.y,m.toLocal(b,void 0,b,!0),V(b,!1),Cy?(i.selectRange(y,w?C:C-1),D._index=y):w===F?i.setCaretIndex(w?C+1:C):(i.selectRange(C,y),D._index=y),D._forward=C<=y,D._down=n.y>0,q(b))},this.focus=function(){if(!this._focused){s.prototype.focus.call(this);var t=this.container.worldTransform.tx+"px",h=this.container.worldTransform.ty+"px",o=this.container.height+"px",r=this.container.width+"px";_pui_tempInput.setAttribute("style","position:fixed; left:"+t+"; top:"+h+"; height:"+o+"; width:"+r+";"),_pui_tempInput.value="",_pui_tempInput.focus(),_pui_tempInput.setAttribute("style","position:fixed; left:-10px; top:-10px; width:0px; height: 0px;"),m.cacheAsBitmap=!1,_pui_tempInput.addEventListener("blur",ht,!1),document.addEventListener("keydown",Z,!1),document.addEventListener("keyup",tt,!1),document.addEventListener("paste",nt,!1),document.addEventListener("copy",it,!1),document.addEventListener("cut",et,!1),_pui_tempInput.addEventListener("textInput",st,!1),setTimeout(function(){D.visible||i.selection.visible||n||i.setCaretIndex(e.length)},0)}},this.blur=function(){this._focused&&(s.prototype.blur.call(this),R=!1,H=!1,K(),this.clearSelection(),e.length>1&&(m.cacheAsBitmap=!0),_pui_tempInput.removeEventListener("blur",ht),document.removeEventListener("keydown",Z),document.removeEventListener("keyup",tt),document.removeEventListener("paste",nt),document.removeEventListener("copy",it),document.removeEventListener("cut",et),_pui_tempInput.removeEventListener("textInput",st),_pui_tempInput.blur()),n||Q()},this.setCaretIndex=function(t){if(D._atEnd=t>=e.length,D._index=Math.max(0,Math.min(e.length-1,t)),e.length&&t>0){var i=Math.max(0,Math.min(t,e.length-1)),n=e[i];n&&n.wrapped?(D.x=n.x,D.y=n.y):(i=Math.max(0,Math.min(t-1,e.length-1)),n=e[i],D.x=e[i].x+e[i].width,D.y=e[i].lineIndex*c+.5*(c-l))}else D.x=0,D.y=.5*(c-l);q(D),$()},this.select=function(){this.selectRange(0,e.length-1)},this.selectWord=function(t){for(var i=e.length,n=0,s=0;sn&&(n=s));this.selectRange(i,n)};var rt=function(t,e,n,s){i.selection.beginFill("0x"+u.slice(1),1),i.selection.moveTo(t,e),i.selection.lineTo(t+n,e),i.selection.lineTo(t+n,e+s),i.selection.lineTo(t,e+s),i.selection.endFill()},ut=function(){var t=e[k];if(void 0!==t){var n=t.x,s=t.y,h=0,o=l,r=t.lineIndex;i.selection.clear();for(var u=k;u<=T;u++){ +var a=e[u];a.lineIndex!=r&&(rt(n,s,h,o),n=a.x,s=a.y,r=a.lineIndex,h=0),h+=a.width}rt(n,s,h,o),m.addChildAt(i.selection,0)}};this.selectRange=function(t,n){if(t>-1&&n>-1){var s=Math.min(t,n,e.length-1),h=Math.min(Math.max(t,n),e.length-1);s==k&&h==T||(A=!0,this.selection.visible=!0,k=s,T=h,K(),ut(),U()),this.focus()}else i.clearSelection()},this.clearSelection=function(){A&&(A=!1,this.selection.visible=!1,k=-1,T=-1,U())}}var s=t("./InputBase"),h=(t("./Container"),t("./Interaction/DragEvent"));n.prototype=Object.create(s.prototype),n.prototype.constructor=n,i.exports=n,Object.defineProperties(n.prototype,{value:{get:function(){return this._value},set:function(t){this.maxLength&&(t=t.slice(0,this.maxLength)),this._value!=t&&(this._lastValue=this._value,this._value=t,this._dirtyText=!0,this.update(),this.emit("change"))}},text:{get:function(){return this.value},set:function(t){this.value=t}}})},{"./Container":4,"./InputBase":11,"./Interaction/DragEvent":14}],28:[function(t,i,e){function n(t){PIXI.utils.EventEmitter.call(this),this._disabled=!0,this._now=0,this.DeltaTime=0,this.Time=performance.now(),this.Ms=0,t&&(this.disabled=!1),n.shared=this}var s=t("./Tween");n.prototype=Object.create(PIXI.utils.EventEmitter.prototype),n.prototype.constructor=n,i.exports=n,Object.defineProperties(n.prototype,{disabled:{get:function(){return this._disabled},set:function(t){this._disabled?(this._disabled=!1,n.shared=this,this.update(performance.now(),!0)):this._disabled=!0}}}),n.prototype.update=function(t){n.shared._now=t,n.shared.Ms=n.shared._now-n.shared.Time,n.shared.Time=n.shared._now,n.shared.DeltaTime=.001*n.shared.Ms,n.shared.emit("update",n.shared.DeltaTime),s._update(n.shared.DeltaTime),n.shared._disabled||requestAnimationFrame(n.shared.update)},n.on=function(t,i,e){n.prototype.on.apply(this.shared,arguments)},n.once=function(t,i,e){n.prototype.once.apply(this.shared,arguments)},n.removeListener=function(t,i){n.prototype.removeListener.apply(this.shared,arguments)},n.shared=new n((!0))},{"./Tween":30}],29:[function(t,i,e){function n(t,i,e){this.sprite=new PIXI.extras.TilingSprite(t),s.call(this,i||this.sprite.width,e||this.sprite.height),this.container.addChild(this.sprite)}var s=t("./UIBase");n.prototype=Object.create(s.prototype),n.prototype.constructor=n,i.exports=n,n.prototype.update=function(){null!==this.tint&&(this.sprite.tint=this.tint),null!==this.blendMode&&(this.sprite.blendMode=this.blendMode),this.sprite.width=this._width,this.sprite.height=this._height},Object.defineProperties(n.prototype,{tilePosition:{get:function(){return this.sprite.tilePosition},set:function(t){this.sprite.tilePosition=t}},tileScale:{get:function(){return this.sprite.tileScale},set:function(t){this.sprite.tileScale=t}}})},{"./UIBase":32}],30:[function(t,i,e){function n(t,i,e,n){return isNaN(t)||isNaN(i)?isNaN(t)&&isNaN(i)&&t.indexOf("%")!==-1&&i.indexOf("%")!==-1?parseFloat(t.replace("%","")):isNaN(t)&&!isNaN(i)&&t.indexOf("%")!==-1?v.indexOf(n)!==-1?e.parent._width*(.01*parseFloat(t.replace("%",""))):m.indexOf(n)!==-1?e.parent._height*(.01*parseFloat(t.replace("%",""))):0:!isNaN(t)&&isNaN(i)&&i.indexOf("%")!==-1?v.indexOf(n)!==-1?t/e.parent._width*100:m.indexOf(n)!==-1?t/e.parent._height*100:0:0:t}function s(t){if(isNaN(t)&&t.indexOf("%")!==-1)return"%"}function h(t){return isNaN(t)?isNaN(t)&&t.indexOf("%")!==-1?parseFloat(t.replace("%","")):void 0:t}function o(t){t._tweenObjectId||(t._tweenObjectId=p,p++);var i=d[t._tweenObjectId];return i||(i=d[t._tweenObjectId]=new g(t)),i}function r(){for(var t=0;t=this.time&&(this._ready=!0,delete this.parent.tweens[this.key],Object.keys(this.parent.tweens).length||(this.parent.active=!1,delete D[this.obj._tweenObjectId]),this.callback())};var _=function(){this._ready=!1,this.parent=null,this.obj=null,this.key="",this.from=0,this.to=0,this.time=0,this.ease=0,this.currentTime=0,this.t=0};_.prototype.set=function(t,i,e,o,r,u){this.parent=t,this.obj=t.object,this.key=i,this.surfix=s(o),this.to=h(o),this.from=n(e,o,this.obj,i),this.time=r,this.currentTime=0,this.ease=u,this._ready=!1,this.parent.active||(this.parent.active=!0,D[this.obj._tweenObjectId]=this.parent)},_.prototype.update=function(t){this.currentTime+=t,this.t=Math.min(this.currentTime,this.time)/this.time,this.ease&&(this.t=this.ease.getPosition(this.t));var i=a.Lerp(this.from,this.to,this.t);this.obj[this.key]=this.surfix?i+this.surfix:i,this.currentTime>=this.time&&(this._ready=!0,delete this.parent.tweens[this.key],Object.keys(this.parent.tweens).length||(this.parent.active=!1,delete D[this.obj._tweenObjectId]))};var v=["width","minWidth","maxWidth","anchorLeft","anchorRight","left","right","x"],m=["height","minHeight","maxHeight","anchorTop","anchorBottom","top","bottom","y"],x={to:function(t,i,e,n){var s=o(t);for(var h in e)if("onComplete"!==h){if(i){if(e[h]==t[h]||"undefined"==typeof t[h])continue;s.tweens[h]||(s.tweens[h]=r()),s.tweens[h].set(s,h,t[h],e[h],i,n)}}else{var a=u();a.set(s,e[h],i),s.tweens[a.key]=a}i||this.set(t,e)},from:function(t,i,e,n){var s=o(t);for(var h in e)if("onComplete"!==h){if(i){if(e[h]==t[h]||"undefined"==typeof t[h])continue;s.tweens[h]||(s.tweens[h]=r()),s.tweens[h].set(s,h,e[h],t[h],i,n)}}else{var a=u();a.set(s,e[h],i),s.tweens[a.key]=a}i||this.set(t,e)},fromTo:function(t,i,e,n,s){var h=o(t);for(var a in n)if("onComplete"!==a){if(i){if(e[a]==n[a]||"undefined"==typeof t[a]||"undefined"==typeof e[a])continue;h.tweens[a]||(h.tweens[a]=r()),h.tweens[a].set(h,a,e[a],n[a],i,s)}}else{var l=u();l.set(h,n[a],i),h.tweens[l.key]=l}i||this.set(t,n)},set:function(t,i){var e=o(t);for(var n in i)i[n]!=t[n]&&"undefined"!=typeof t[n]&&(e.tweens[n]&&delete e.tweens[n],t[n]=i[n])},_update:function(t){for(var i in D){var e=D[i];for(var n in e.tweens)e.tweens[n].update(t)}}};i.exports=x},{"./Ease/Ease":8,"./MathHelper":18}],31:[function(t,i,e){var n={Stage:t("./Stage"),Container:t("./Container"),ScrollingContainer:t("./ScrollingContainer"),SortableList:t("./SortableList"),Sprite:t("./Sprite"),TilingSprite:t("./TilingSprite"),SliceSprite:t("./SliceSprite"),Slider:t("./Slider"),ScrollBar:t("./ScrollBar"),Text:t("./Text"),DynamicText:t("./DynamicText/DynamicText"),DynamicTextStyle:t("./DynamicText/DynamicTextStyle"),TextInput:t("./TextInput"),Button:t("./Button"),CheckBox:t("./CheckBox"),MathHelper:t("./MathHelper"),Tween:t("./Tween"),Ease:t("./Ease/Ease"),Interaction:t("./Interaction/Interaction"),Ticker:t("./Ticker").shared};i.exports=n},{"./Button":2,"./CheckBox":3,"./Container":4,"./DynamicText/DynamicText":6,"./DynamicText/DynamicTextStyle":7,"./Ease/Ease":8,"./Interaction/Interaction":16,"./MathHelper":18,"./ScrollBar":19,"./ScrollingContainer":20,"./SliceSprite":21,"./Slider":22,"./SortableList":23,"./Sprite":24,"./Stage":25,"./Text":26,"./TextInput":27,"./Ticker":28,"./TilingSprite":29,"./Tween":30}],32:[function(t,i,e){function n(t,i){PIXI.utils.EventEmitter.call(this),this.container=new PIXI.Container,this.setting=new s,this.children=[],this.parent=null,this.stage=null,this.initialized=!1,this.dragInitialized=!1,this.dropInitialized=!1,this.dirty=!0,this._oldWidth=-1,this._oldHeight=-1,this.pixelPerfect=!0,t&&isNaN(t)&&t.indexOf("%")!=-1?this.setting.widthPct=.01*parseFloat(t.replace("%","")):this.setting.widthPct=null,i&&isNaN(i)&&i.indexOf("%")!=-1?this.setting.heightPct=.01*parseFloat(i.replace("%","")):this.setting.heightPct=null,this.setting.width=t||0,this.setting.height=i||0,this._width=0,this._height=0,this._minWidth=null,this._minHeight=null,this._maxWidth=null,this._maxHeight=null,this._anchorLeft=null,this._anchorRight=null,this._anchorTop=null,this._anchorBottom=null,this._left=null,this._right=null,this._top=null,this._bottom=null,this._dragPosition=null}var s=t("./UISettings"),h=(t("./UI"),t("./Interaction/DragEvent")),o=t("./Interaction/DragDropController");n.prototype=Object.create(PIXI.utils.EventEmitter.prototype),n.prototype.constructor=n,i.exports=n,n.prototype.updatesettings=function(t,i){if(!this.initialized){if(null===this.parent||null===this.parent.stage||!this.parent.initialized)return;this.initialize()}i&&this.updateParent(),this.baseupdate(),this.update(),t&&this.updateChildren()},n.prototype.update=function(){},n.prototype.updateParent=function(){null!==this.parent&&this.parent.updatesettings&&this.parent.updatesettings(!1,!0)},n.prototype.baseupdate=function(){if(null!==this.parent){var t,i;this.dirty=!0,this._width=this.actual_width,this._height=this.actual_height,this._minWidth=this.actual_minWidth,this._minHeight=this.actual_minHeight,this._maxWidth=this.actual_maxWidth,this._maxHeight=this.actual_maxHeight,this._anchorLeft=this.actual_anchorLeft,this._anchorRight=this.actual_anchorRight,this._anchorTop=this.actual_anchorTop,this._anchorBottom=this.actual_anchorBottom,this._left=this.actual_left,this._right=this.actual_right,this._top=this.actual_top,this._bottom=this.actual_bottom,this._parentWidth=i=this.parent._width,this._parentHeight=t=this.parent._height,this.dirty=!1;var e=this.pivotX*this._width,n=this.pivotY*this._height;if(this.pixelPerfect&&(e=Math.round(e),n=Math.round(n)),null===this.horizontalAlign){null!==this._anchorLeft&&null===this._anchorRight&&null!==this._right?this._anchorRight=this._right:null===this._anchorLeft&&null!==this._anchorRight&&null!==this._left?this._anchorLeft=this._left:null===this._anchorLeft&&null===this._anchorRight&&null!==this._left&&null!==this._right&&(this._anchorLeft=this._left,this._anchorRight=this._right);var s=null!==this._anchorLeft||null!==this._anchorRight,h=!s&&(null!==this._left||null!==this._right);h?null!==this._left?this.container.position.x=this._left:null!==this._right&&(this.container.position.x=i-this._right):s?(null!==this._anchorLeft&&null===this._anchorRight?this.container.position.x=this._anchorLeft:null===this._anchorLeft&&null!==this._anchorRight?this.container.position.x=i-this._width-this._anchorRight:null!==this._anchorLeft&&null!==this._anchorRight&&(this.container.position.x=this._anchorLeft,this._width=i-this._anchorLeft-this._anchorRight),this.container.position.x+=e):this.container.position.x=0}if(null===this.verticalAlign){null!==this._anchorTop&&null===this._anchorBottom&&null!==this._bottom&&(this._anchorBottom=this._bottom),null===this._anchorTop&&null!==this._anchorBottom&&null!==this._top&&(this._anchorTop=this._top);var o=null!==this._anchorTop||null!==this._anchorBottom,r=!o&&(null!==this._top||null!==this._bottom);r?null!==this._top?this.container.position.y=this._top:null!==this._bottom&&(this.container.position.y=t-this._bottom):o?(null!==this._anchorTop&&null===this._anchorBottom?this.container.position.y=this._anchorTop:null===this._anchorTop&&null!==this._anchorBottom?this.container.position.y=t-this._height-this._anchorBottom:null!==this._anchorTop&&null!==this._anchorBottom&&(this.container.position.y=this._anchorTop,this._height=t-this._anchorTop-this._anchorBottom),this.container.position.y+=n):this.container.position.y=0}null!==this._maxWidth&&this._width>this._maxWidth&&(this._width=this._maxWidth),this._widththis._maxHeight&&(this._height=this._maxHeight),this._height1)for(var e=0;e1)for(var e=0;e renderCount) {\r\n for (i = renderCount; i < spriteCache.length; i++) {\r\n var removeSprite = spriteCache[i];\r\n if (removeSprite)\r\n removeSprite.visible = false;\r\n }\r\n }\r\n\r\n var char, lineWidth = 0, lineHeight = 0, maxLineWidth = 0;\r\n\r\n for (i = 0; i < renderCount; i++) {\r\n char = renderChars[i];\r\n\r\n //get line data\r\n if (currentLine !== char.lineIndex) {\r\n currentLine = char.lineIndex;\r\n lineWidth = lineWidthData[currentLine];\r\n lineHeight = lineHeightData[currentLine];\r\n yOffset += lineHeight;\r\n\r\n\r\n\r\n switch (lineAlignmentData[currentLine]) {\r\n case 'right': xOffset = this._width - lineWidth; break;\r\n case 'center': xOffset = (this._width - lineWidth) * 0.5; break;\r\n default: xOffset = 0;\r\n }\r\n\r\n\r\n maxLineWidth = Math.max(lineWidth, maxLineWidth);\r\n }\r\n\r\n //no reason to render a blank space or 0x0 letters (no texture created)\r\n if (!char.data.texture || char.space || char.newline) {\r\n if (spriteCache[i])\r\n spriteCache[i].visible = false;\r\n continue;\r\n }\r\n\r\n\r\n //add new sprite\r\n var tex = char.data.texture, sprite = spriteCache[i];\r\n\r\n\r\n\r\n if (!sprite) {\r\n sprite = spriteCache[i] = new PIXI.Sprite(tex);\r\n sprite.anchor.set(0.5);\r\n }\r\n else\r\n sprite.texture = tex;\r\n\r\n\r\n\r\n sprite.visible = true;\r\n sprite.x = char.x + xOffset + tex.width * 0.5;\r\n sprite.y = char.y + yOffset - tex.height * 0.5 - (lineHeight - lineFontSizeData[currentLine]);\r\n\r\n\r\n sprite.tint = char.emoji ? 0xffffff : hexToInt(char.style.tint, 0xffffff);\r\n sprite.rotation = float(char.style.rotation, 0);\r\n sprite.skew.x = float(char.style.skew, 0);\r\n\r\n if (!sprite.parent)\r\n charContainer.addChild(sprite);\r\n }\r\n\r\n if (autoWidth) this.width = maxLineWidth;\r\n if (autoHeight) this.height = yOffset;\r\n };\r\n\r\n //updates the renderChar array and position chars for render\r\n this.prepareForRender = function () {\r\n var pos = new PIXI.Point(),\r\n wordIndex = 0,\r\n lineHeight = 0,\r\n lineFontSize = 0,\r\n lineIndex = 0,\r\n lineAlignment = defaultStyle.align,\r\n lastSpaceIndex = -1,\r\n lastSpaceLineWidth = 0,\r\n textHeight = 0,\r\n forceNewline = false,\r\n style,\r\n renderIndex = 0,\r\n ellipsis = false,\r\n lineFull = false,\r\n i;\r\n\r\n\r\n\r\n\r\n for (i = 0; i < charCount; i++) {\r\n var char = chars[i], lastChar = chars[i - 1];\r\n style = char.style;\r\n\r\n\r\n //lineheight\r\n lineHeight = Math.max(lineHeight, defaultStyle.lineHeight || style.lineHeight || char.data.lineHeight);\r\n\r\n if (style.overflowY !== 'visible' && lineHeight + textHeight > this._height) {\r\n if (style.overflowY === 'hidden')\r\n break;\r\n\r\n }\r\n\r\n if (char.newline)\r\n lineFull = false;\r\n\r\n\r\n //set word index\r\n if (char.space || char.newline) wordIndex++;\r\n else char.wordIndex = wordIndex;\r\n\r\n //textheight\r\n lineFontSize = Math.max(lineFontSize, style.fontSize);\r\n\r\n //lineindex\r\n char.lineIndex = lineIndex;\r\n\r\n //lineAlignment\r\n if (style.align !== defaultStyle.align) lineAlignment = style.align;\r\n\r\n\r\n if (char.space) {\r\n lastSpaceIndex = i;\r\n lastSpaceLineWidth = pos.x;\r\n }\r\n\r\n\r\n var size = Math.round(char.data.width) + float(style.letterSpacing, 0);\r\n if (!autoWidth && !forceNewline && !char.newline && pos.x + size > this._width) {\r\n if (style.wrap) {\r\n if (char.space) {\r\n forceNewline = true;\r\n }\r\n else if (lastSpaceIndex !== -1) {\r\n renderIndex -= i - lastSpaceIndex;\r\n i = lastSpaceIndex - 1;\r\n lastSpaceIndex = -1;\r\n pos.x = lastSpaceLineWidth;\r\n forceNewline = true;\r\n continue;\r\n\r\n }\r\n else if (style.breakWords) {\r\n if (lastChar) {\r\n pos.x -= lastChar.style.letterSpacing;\r\n pos.x -= lastChar.data.width;\r\n }\r\n i -= 2;\r\n renderIndex--;\r\n forceNewline = true;\r\n continue;\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n if (style.overflowX == 'hidden' && !forceNewline) {\r\n lineFull = true;\r\n if (style.ellipsis && !ellipsis) {\r\n ellipsis = true;\r\n var ellipsisData = lineEllipsisData[lineIndex];\r\n if (!ellipsisData) ellipsisData = lineEllipsisData[lineIndex] = [new DynamicChar(), new DynamicChar(), new DynamicChar()];\r\n for (var d = 0; d < 3; d++) {\r\n var dot = ellipsisData[d];\r\n dot.value = \".\";\r\n dot.data = atlas.getCharObject(dot.value, style);\r\n dot.style = style;\r\n dot.x = pos.x + char.data.xOffset;\r\n dot.y = parseFloat(style.verticalAlign) + dot.data.yOffset;\r\n dot.lineIndex = lineIndex;\r\n pos.x += Math.round(dot.data.width) + float(style.letterSpacing, 0);\r\n renderChars[renderIndex] = dot;\r\n renderIndex++;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n //Update position and add to renderchars\r\n if (!lineFull) {\r\n //position\r\n char.x = pos.x + char.data.xOffset;\r\n char.y = parseFloat(style.verticalAlign) + char.data.yOffset;\r\n pos.x += size;\r\n renderChars[renderIndex] = char;\r\n renderIndex++;\r\n }\r\n\r\n\r\n\r\n //new line\r\n if (forceNewline || char.newline || i === charCount - 1) {\r\n if (lastChar) {\r\n pos.x -= lastChar.style.letterSpacing;\r\n if (lastChar.space) pos.x -= lastChar.data.width;\r\n }\r\n\r\n if (char.space) {\r\n pos.x -= char.data.width;\r\n pos.x -= float(style.letterSpacing, 0);\r\n }\r\n\r\n textHeight += lineHeight;\r\n lineHasEllipsis[lineIndex] = ellipsis;\r\n lineWidthData[lineIndex] = pos.x;\r\n lineHeightData[lineIndex] = lineHeight;\r\n lineFontSizeData[lineIndex] = lineFontSize;\r\n lineAlignmentData[lineIndex] = lineAlignment;\r\n\r\n\r\n //reset line vaules\r\n lineHeight = pos.x = lastSpaceLineWidth = lineFontSize = 0;\r\n lineAlignment = defaultStyle.align;\r\n lastSpaceIndex = -1;\r\n lineIndex++;\r\n forceNewline = lineFull = ellipsis = false;\r\n\r\n }\r\n\r\n }\r\n\r\n renderCount = renderIndex;\r\n };\r\n\r\n //phrases the input text and prepares the char array\r\n var closeTags = ['', '', '', '
'];\r\n this.processInputText = function () {\r\n var styleTree = [defaultStyle],\r\n charIndex = 0,\r\n inputTextIndex = 0,\r\n inputArray = Array.from(this._inputText);\r\n\r\n for (var i = 0; i < inputArray.length; i++) {\r\n style = styleTree[styleTree.length - 1];\r\n var c = inputArray[i],\r\n charcode = c.charCodeAt(0),\r\n newline = false,\r\n space = false,\r\n emoji = false;\r\n\r\n\r\n //Extract Tags\r\n if (/(?:\\r\\n|\\r|\\n)/.test(c))\r\n newline = true;\r\n else if (/(\\s)/.test(c))\r\n space = true;\r\n else if (options.allowTags && c === \"<\") {\r\n var tag = this._inputText.substring(inputTextIndex);\r\n tag = tag.slice(0, tag.indexOf(\">\") + 1);\r\n var FoundTag = true;\r\n if (tag.length) {\r\n if (tag === \"\") {\r\n style = style.clone();\r\n style.fontStyle = 'italic';\r\n styleTree.push(style);\r\n }\r\n else if (tag === \"\") {\r\n style = style.clone();\r\n style.fontWeight = 'bold';\r\n styleTree.push(style);\r\n }\r\n else if (tag === \"
\") {\r\n style = style.clone();\r\n style.align = 'center';\r\n styleTree.push(style);\r\n }\r\n else if (closeTags.indexOf(tag) !== -1) {\r\n if (styleTree.length > 1) styleTree.splice(styleTree.length - 1, 1);\r\n }\r\n else if (tag.startsWith(\"\\s]*)(?=\\s|\\/>))(?=[^<]*>)/g,\r\n match = regex.exec(tag);\r\n\r\n if (match !== null) {\r\n style = style.clone();\r\n while (match !== null) {\r\n switch (match[1]) {\r\n case 'family': match[1] = 'fontFamily'; break;\r\n case 'size': match[1] = 'fontSize'; break;\r\n case 'weight': match[1] = 'fontWeight'; break;\r\n case 'style': match[1] = 'fontStyle'; break;\r\n case 'valign': match[1] = 'verticalAlign'; break;\r\n case 'spacing': match[1] = 'letterSpacing'; break;\r\n case 'color': match[1] = 'tint'; break;\r\n\r\n }\r\n style[match[1]] = match[4];\r\n match = regex.exec(tag);\r\n }\r\n styleTree.push(style);\r\n }\r\n }\r\n else {\r\n FoundTag = false;\r\n }\r\n\r\n if (FoundTag) {\r\n inputTextIndex += tag.length;\r\n i += tag.length - 1;\r\n continue;\r\n }\r\n }\r\n }\r\n else {\r\n //detect emoji\r\n var emojiMatch = emojiRegex().exec(c);\r\n if (emojiMatch !== null) {\r\n i--; c = '';\r\n while (emojiMatch !== null && c !== emojiMatch[0]) {\r\n i++;\r\n c = emojiMatch[0];\r\n emojiMatch = emojiRegex().exec(c + inputArray[i + 1]);\r\n }\r\n emoji = true;\r\n }\r\n }\r\n\r\n\r\n //Prepare DynamicChar object\r\n var char = chars[charIndex];\r\n if (!char) {\r\n char = new DynamicChar();\r\n chars[charIndex] = char;\r\n }\r\n char.style = style;\r\n\r\n\r\n if (emoji) {\r\n char.style = char.style.clone();\r\n char.style.fontFamily = DynamicText.settings.defaultEmojiFont;\r\n }\r\n\r\n char.data = atlas.getCharObject(c, char.style);\r\n char.value = c;\r\n char.space = space;\r\n char.newline = newline;\r\n char.emoji = emoji;\r\n\r\n charIndex++;\r\n inputTextIndex += c.length;\r\n }\r\n charCount = charIndex;\r\n };\r\n\r\n //PIXIUI update, lazy update (bad solution needs rewrite when converted to pixi plugin)\r\n this.lazyUpdate = null;\r\n var self = this;\r\n this.update = function () {\r\n if (self.lazyUpdate !== null) return;\r\n self.lazyUpdate = setTimeout(function () {\r\n \r\n console.log(\"UPDATING TEXT\");\r\n var dirtySize = !autoWidth && (self._width != lastWidth || self._height != lastHeight || self.dirtyText);\r\n\r\n if (self.dirtyText || self.dirtyStyle) {\r\n self.dirtyText = self.dirtyStyle = false;\r\n self.dirtyRender = true; //force render after textchange\r\n self.processInputText();\r\n }\r\n\r\n if (dirtySize || self.dirtyRender) {\r\n self.dirtyRender = false;\r\n lastWidth = self._width;\r\n lastHeight = self.height;\r\n self.prepareForRender();\r\n self.render();\r\n }\r\n self.lazyUpdate = null;\r\n }, 0);\r\n\r\n };\r\n}\r\n\r\n\r\nDynamicText.prototype = Object.create(UIBase.prototype);\r\nDynamicText.prototype.constructor = DynamicText;\r\nmodule.exports = DynamicText;\r\nDynamicText.settings = {\r\n debugSpriteSheet: false,\r\n defaultEmojiFont: \"Segoe UI Emoji\" //force one font family for emojis so we dont rerender them multiple times\r\n};\r\n\r\nObject.defineProperties(DynamicText.prototype, {\r\n value: {\r\n get: function () {\r\n return this._inputText;\r\n },\r\n set: function (val) {\r\n if (val !== this._inputText) {\r\n this._inputText = val;\r\n this.dirtyText = true;\r\n this.update();\r\n console.log(\"Updating Text to: \" + val);\r\n }\r\n }\r\n },\r\n text: {\r\n get: function () {\r\n return this.value;\r\n },\r\n set: function (val) {\r\n \r\n this.value = val;\r\n }\r\n },\r\n style: {\r\n get: function () {\r\n return this._style;\r\n },\r\n set: function (val) {\r\n //get a clean default style\r\n var style = new DynamicTextStyle(this);\r\n\r\n //merge it with new style\r\n style.merge(val);\r\n\r\n //merge it onto this default style\r\n this._style.merge(style);\r\n\r\n this.dirtyStyle = true;\r\n this.update();\r\n }\r\n }\r\n});\r\n\r\n\r\n\r\n\r\n\r\n\r\n//Atlas\r\nvar metricsCanvas = document.createElement(\"canvas\");\r\nvar metricsContext = metricsCanvas.getContext(\"2d\");\r\nmetricsCanvas.width = 100;\r\nmetricsCanvas.height = 100;\r\n\r\n\r\nvar DynamicAtlas = function (padding) {\r\n var res = devicePixelRatio || 1,\r\n canvas,\r\n context,\r\n objects,\r\n newObjects = [],\r\n baseTexture,\r\n lazyTimeout,\r\n rootNode,\r\n canvasList = [],\r\n atlasdim,\r\n startdim = 256,\r\n maxdim = 2048;\r\n\r\n\r\n var AtlasNode = function (w, h) {\r\n var children = this.children = [];\r\n this.rect = new PIXI.Rectangle(0, 0, w || 0, h || 0);\r\n this.data = null;\r\n\r\n this.insert = function (width, height, obj) {\r\n if (children.length > 0) {\r\n var newNode = children[0].insert(width, height, obj);\r\n if (newNode !== null) return newNode;\r\n\r\n return children[1].insert(width, height, obj);\r\n } else {\r\n if (this.data !== null) return null;\r\n if (width > this.rect.width || height > this.rect.height) return null;\r\n if (width == this.rect.width && height == this.rect.height) {\r\n this.data = obj;\r\n obj.frame.x = this.rect.x;\r\n obj.frame.y = this.rect.y;\r\n return this;\r\n }\r\n\r\n children.push(new AtlasNode());\r\n children.push(new AtlasNode());\r\n\r\n var dw = this.rect.width - width;\r\n var dh = this.rect.height - height;\r\n\r\n if (dw > dh) {\r\n children[0].rect = new PIXI.Rectangle(this.rect.x, this.rect.y, width, this.rect.height);\r\n children[1].rect = new PIXI.Rectangle(this.rect.x + width, this.rect.y, this.rect.width - width, this.rect.height);\r\n } else {\r\n children[0].rect = new PIXI.Rectangle(this.rect.x, this.rect.y, this.rect.width, height);\r\n children[1].rect = new PIXI.Rectangle(this.rect.x, this.rect.y + height, this.rect.width, this.rect.height - height);\r\n }\r\n\r\n return children[0].insert(width, height, obj);\r\n }\r\n };\r\n };\r\n\r\n var addCanvas = function () {\r\n //create new canvas\r\n canvas = document.createElement(\"canvas\");\r\n context = canvas.getContext(\"2d\");\r\n canvasList.push(canvas);\r\n\r\n //reset dimentions\r\n atlasdim = startdim;\r\n canvas.width = canvas.height = atlasdim;\r\n rootNode = new AtlasNode(atlasdim, atlasdim);\r\n\r\n //reset array with canvas objects and create new atlas\r\n objects = [];\r\n\r\n //set new basetexture\r\n baseTexture = PIXI.BaseTexture.fromCanvas(canvas);\r\n baseTexture.mipmap = false; //if not, pixi bug resizing POW2\r\n baseTexture.resolution = 1; //todo: support all resolutions\r\n baseTexture.update();\r\n\r\n //Debug Spritesheet\r\n if (DynamicText.settings.debugSpriteSheet) {\r\n canvas.className = \"DynamicText_SpriteSheet\";\r\n document.body.appendChild(canvas);\r\n }\r\n\r\n };\r\n\r\n this.fontFamilyCache = {};\r\n\r\n var drawObjects = function (arr, resized) {\r\n if (resized) baseTexture.update();\r\n for (var i = 0; i < arr.length; i++)\r\n drawObject(arr[i]);\r\n };\r\n\r\n var drawObject = function (obj) {\r\n context.drawImage(obj._cache, obj.frame.x, obj.frame.y);\r\n obj.texture.frame = obj.frame;\r\n obj.texture.update();\r\n };\r\n\r\n this.getCharObject = function (char, style) {\r\n var font = style.ctxFont();\r\n\r\n //create new cache for fontFamily\r\n var familyCache = this.fontFamilyCache[font];\r\n if (!familyCache) {\r\n familyCache = {};\r\n this.fontFamilyCache[font] = familyCache;\r\n }\r\n\r\n\r\n\r\n //get char data\r\n var key = style.ctxKey(char);\r\n var obj = familyCache[key];\r\n if (!obj) {\r\n //create char object\r\n var metrics = generateCharData(char, style);\r\n\r\n\r\n\r\n //temp resize if doesnt fit (not nesseary when we dont need to generate textures)\r\n if (metrics.rect) {\r\n if (canvas.width < metrics.rect.width || canvas.height < metrics.rect.height) {\r\n canvas.width = canvas.height = Math.max(metrics.rect.width, metrics.rect.height);\r\n baseTexture.update();\r\n }\r\n }\r\n\r\n\r\n //todo: cleanup when we know whats needed\r\n obj = {\r\n metrics: metrics,\r\n font: font,\r\n value: char,\r\n frame: metrics.rect,\r\n baseTexture: metrics.rect ? baseTexture : null,\r\n xOffset: metrics.bounds ? metrics.bounds.minx : 0,\r\n yOffset: metrics.descent || 0,\r\n width: metrics.width || 0,\r\n lineHeight: metrics.lineHeight || 0,\r\n _cache: metrics.canvas,\r\n texture: metrics.rect ? new PIXI.Texture(baseTexture, metrics.rect) : null //temp texture\r\n };\r\n\r\n //add to collections\r\n familyCache[key] = obj;\r\n\r\n\r\n //add to atlas if visible char\r\n if (metrics.rect) {\r\n newObjects.push(obj);\r\n\r\n\r\n\r\n if (lazyTimeout === undefined)\r\n lazyTimeout = setTimeout(function () {\r\n addNewObjects();\r\n lazyTimeout = undefined;\r\n }, 0);\r\n\r\n }\r\n }\r\n\r\n return obj;\r\n };\r\n\r\n var compareFunction = function (a, b) {\r\n if (a.frame.height < b.frame.height)\r\n return 1;\r\n\r\n if (a.frame.height > b.frame.height)\r\n return -1;\r\n\r\n\r\n if (a.frame.width < b.frame.width)\r\n return 1;\r\n\r\n if (a.frame.width > b.frame.width)\r\n return -1;\r\n\r\n\r\n return 0;\r\n };\r\n\r\n var addNewObjects = function () {\r\n newObjects.sort(compareFunction);\r\n var _resized = false;\r\n var _newcanvas = false;\r\n\r\n for (var i = 0; i < newObjects.length; i++) {\r\n var obj = newObjects[i];\r\n var node = rootNode.insert(obj.frame.width + padding, obj.frame.height + padding, obj);\r\n\r\n if (node !== null) {\r\n if (_newcanvas) obj.texture.baseTexture = baseTexture; //update basetexture if new canvas was created (temp)\r\n objects.push(obj);\r\n continue;\r\n }\r\n\r\n //step one back (so it will be added after resize/new canvas)\r\n i--;\r\n\r\n if (atlasdim < maxdim) {\r\n _resized = true;\r\n resizeCanvas(atlasdim * 2);\r\n continue;\r\n }\r\n\r\n //close current spritesheet and make a new one\r\n drawObjects(objects, _resized);\r\n addCanvas();\r\n _newcanvas = true;\r\n _resized = false;\r\n }\r\n\r\n drawObjects(_resized || _newcanvas ? objects : newObjects, _resized);\r\n newObjects = [];\r\n };\r\n\r\n var resizeCanvas = function (dim) {\r\n canvas.width = canvas.height = atlasdim = dim;\r\n\r\n rootNode = new AtlasNode(dim, dim);\r\n objects.sort(compareFunction);\r\n\r\n for (var i = 0; i < objects.length; i++) {\r\n var obj = objects[i];\r\n rootNode.insert(obj.frame.width + padding, obj.frame.height + padding, obj);\r\n }\r\n };\r\n\r\n var generateCharData = function (char, style) {\r\n\r\n var fontSize = Math.max(1, int(style.fontSize, 26)),\r\n lineHeight = fontSize * 1.25;\r\n\r\n\r\n //Start our returnobject\r\n var data = {\r\n fontSize: fontSize,\r\n lineHeight: lineHeight,\r\n width: 0\r\n };\r\n\r\n //Return if newline\r\n if (!char || /(?:\\r\\n|\\r|\\n)/.test(char))\r\n return data;\r\n\r\n //Ctx font string\r\n var font = style.ctxFont();\r\n metricsContext.font = font;\r\n\r\n //Get char width\r\n data.width = Math.round(metricsContext.measureText(char).width);\r\n\r\n //Return if char = space\r\n if (/(\\s)/.test(char)) return data;\r\n\r\n //set canvas size (with padding so we can messure)\r\n var paddingY = Math.round(fontSize * 0.7), paddingX = Math.max(5, Math.round(fontSize * 0.7));\r\n metricsCanvas.width = Math.ceil(data.width) + paddingX * 2;\r\n metricsCanvas.height = 1.5 * fontSize;\r\n var w = metricsCanvas.width, h = metricsCanvas.height, baseline = (h / 2) + (paddingY * 0.5);\r\n\r\n //set font again after resize\r\n metricsContext.font = font;\r\n\r\n //make sure canvas is clean\r\n metricsContext.clearRect(0, 0, w, h);\r\n\r\n //save clean state with font\r\n metricsContext.save();\r\n\r\n //convert shadow string to shadow data\r\n var shadowData = function (str) {\r\n var data = str.trim().split(' ');\r\n return {\r\n color: string(data[0], \"#000000\"),\r\n alpha: float(data[1], 0.5),\r\n xOffset: float(data[2], 3),\r\n yOffset: float(data[3], 3),\r\n blur: float(data[4], 5)\r\n };\r\n };\r\n\r\n //convert fill string to fill data\r\n var fillData = function (str) {\r\n var data = str.trim().split(' ');\r\n var c = string(data[0], \"#FFFFFF\");\r\n var a = float(data[1], 1);\r\n return {\r\n color: c,\r\n alpha: a,\r\n position: float(data[2], -1),\r\n rgba: hexToRgba(c, a)\r\n };\r\n };\r\n\r\n //create fill style from fill string\r\n var getFillStyle = function (str) {\r\n var fills = str.split(',').filter(function (s) { return s !== ''; }), i;\r\n\r\n //convert to fill data\r\n for (i = 0; i < fills.length; i++) fills[i] = fillData(fills[i]);\r\n\r\n switch (fills.length) {\r\n case 0: return \"white\";\r\n case 1: return fills[0].rgba ? fills[0].rgba : fills[0].color || \"#FFFFFF\";\r\n default:\r\n //make gradient\r\n try {\r\n var gradEnd = baseline + lineHeight - fontSize,\r\n gradient = metricsContext.createLinearGradient(0, gradEnd - fontSize, 0, gradEnd);\r\n\r\n for (i = 0; i < fills.length; i++)\r\n gradient.addColorStop(fills[i].position !== -1 ? fills[i].position : i / (fills.length - 1), fills[i].rgba || fills[i].color);\r\n\r\n return gradient;\r\n }\r\n catch (e) {\r\n return \"#FFFFFF\";\r\n }\r\n }\r\n };\r\n\r\n\r\n //function to draw shadows\r\n var drawShadows = function (shadowString, stroke) {\r\n var shadows = shadowString.trim().split(',').filter(function (s) { return s !== ''; });\r\n if (shadows.length) {\r\n for (var i = 0; i < shadows.length; i++) {\r\n var s = shadowData(shadows[i]);\r\n metricsContext.globalAlpha = s.alpha;\r\n metricsContext.shadowColor = s.color;\r\n metricsContext.shadowOffsetX = s.xOffset + w;\r\n metricsContext.shadowOffsetY = s.yOffset;\r\n metricsContext.shadowBlur = s.blur;\r\n\r\n if (stroke) {\r\n metricsContext.lineWidth = style.stroke;\r\n metricsContext.strokeText(char, paddingX - w, baseline);\r\n }\r\n else metricsContext.fillText(char, paddingX - w, baseline);\r\n }\r\n metricsContext.restore();\r\n }\r\n };\r\n\r\n //draw text shadows\r\n if (style.shadow.length)\r\n drawShadows(style.shadow, false);\r\n\r\n //draw stroke shadows\r\n if (style.stroke && style.strokeShadow.length) {\r\n drawShadows(style.strokeShadow, true);\r\n }\r\n\r\n //draw text\r\n metricsContext.fillStyle = getFillStyle(string(style.fill, \"#000000\"));\r\n metricsContext.fillText(char, paddingX, baseline);\r\n metricsContext.restore();\r\n\r\n //draw stroke\r\n if (style.stroke) {\r\n metricsContext.strokeStyle = getFillStyle(string(style.strokeFill, \"#000000\"));\r\n metricsContext.lineWidth = style.stroke;\r\n metricsContext.strokeText(char, paddingX, baseline);\r\n metricsContext.restore();\r\n }\r\n\r\n\r\n //begin messuring\r\n var pixelData = metricsContext.getImageData(0, 0, w, h).data;\r\n\r\n var i = 3,\r\n line = w * 4,\r\n len = pixelData.length;\r\n\r\n\r\n\r\n //scanline on alpha\r\n while (i < len && !pixelData[i]) { i += 4; }\r\n var ascent = (i / line) | 0;\r\n\r\n\r\n if (i < len) {\r\n //rev scanline on alpha\r\n i = len - 1;\r\n while (i > 0 && !pixelData[i]) { i -= 4; }\r\n var descent = (i / line) | 0;\r\n\r\n\r\n //left to right scanline on alpha\r\n for (i = 3; i < len && !pixelData[i];) {\r\n i += line;\r\n if (i >= len) { i = (i - len) + 4; }\r\n }\r\n var minx = ((i % line) / 4) | 0;\r\n\r\n //right to left scanline on alpha\r\n var step = 1;\r\n for (i = len - 1; i >= 0 && !pixelData[i];) {\r\n i -= line;\r\n if (i < 0) { i = (len - 1) - (step++) * 4; }\r\n }\r\n var maxx = ((i % line) / 4) + 1 | 0;\r\n\r\n\r\n // set font metrics\r\n data.ascent = Math.round(baseline - ascent);\r\n data.descent = Math.round(descent - baseline);\r\n data.height = 1 + Math.round(descent - ascent);\r\n data.bounds = {\r\n minx: minx - paddingX,\r\n maxx: maxx - paddingX,\r\n miny: 0,\r\n maxy: descent - ascent\r\n };\r\n data.rect = {\r\n x: data.bounds.minx,\r\n y: -data.ascent - 2,\r\n width: data.bounds.maxx - data.bounds.minx + 2,\r\n height: data.ascent + data.descent + 4\r\n };\r\n\r\n\r\n //cache (for fast rearrange later)\r\n data.canvas = document.createElement(\"canvas\");\r\n data.canvas.width = data.rect.width;\r\n data.canvas.height = data.rect.height;\r\n var c = data.canvas.getContext(\"2d\");\r\n c.drawImage(metricsCanvas, -paddingX - data.rect.x, -baseline - data.rect.y);\r\n\r\n //reset rect position\r\n data.rect.x = data.rect.y = 0;\r\n\r\n\r\n }\r\n return data;\r\n };\r\n\r\n addCanvas();\r\n};\r\n\r\n\r\n\r\n//helper function for float or default\r\nfunction float(val, def) {\r\n if (isNaN(val)) return def;\r\n return parseFloat(val);\r\n}\r\n\r\n//helper function for int or default\r\nfunction int(val, def) {\r\n if (isNaN(val)) return def;\r\n return parseInt(val);\r\n}\r\n\r\n//helper function for string or default\r\nfunction string(val, def) {\r\n if (typeof val === 'string' && val.length) return val;\r\n return def;\r\n}\r\n\r\n//helper function to convert string hex to int or default\r\nfunction hexToInt(str, def) {\r\n if (typeof str === 'number')\r\n return str;\r\n\r\n var result = parseInt(str.replace('#', '0x'));\r\n\r\n if (isNaN(result)) return def;\r\n return result;\r\n}\r\n\r\n//helper function to convert hex to rgba\r\nfunction hexToRgba(hex, alpha) {\r\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n alpha = float(alpha, 1);\r\n return result ? \"rgba(\" + parseInt(result[1], 16) + \",\" + parseInt(result[2], 16) + \",\" + parseInt(result[3], 16) + \",\" + alpha + \")\" : false;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","function DynamicTextStyle(parent) {\r\n this.respectDirty = true;\r\n this._parent = parent || null;\r\n this._scale = 1;\r\n this._align = 'left';\r\n this._fontFamily = 'Arial';\r\n this._fontSize = 26;\r\n this._fontWeight = 'normal';\r\n this._fontStyle = 'normal';\r\n this._letterSpacing = 0;\r\n this._lineHeight = 0;\r\n this._verticalAlign = 0;\r\n this._rotation = 0;\r\n this._skew = 0;\r\n this._tint = \"#FFFFFF\";\r\n this._fill = '#FFFFFF';\r\n this._shadow = '';\r\n this._stroke = 0;\r\n this._strokeFill = '';\r\n this._strokeShadow = '';\r\n this._wrap = true;\r\n this._breakWords = false;\r\n this._overflowX = 'visible'; //visible|hidden\r\n this._overflowY = 'visible'; //visible|hidden\r\n this._ellipsis = false;\r\n\r\n\r\n var _cachedEllipsisSize = null;\r\n this.ellipsisSize = function (atlas) {\r\n if (!this.ellipsis) return 0;\r\n if (_cachedEllipsisSize === null)\r\n _cachedEllipsisSize = (atlas.getCharObject(\".\", this).width + this.letterSpacing) * 3;\r\n return _cachedEllipsisSize;\r\n };\r\n}\r\n\r\n\r\nDynamicTextStyle.prototype.clone = function () {\r\n var style = new DynamicTextStyle();\r\n style.merge(this);\r\n return style;\r\n};\r\n\r\nDynamicTextStyle.prototype.merge = function (style) {\r\n\r\n if (typeof style === 'object') {\r\n this.respectDirty = false;\r\n for (var param in style) {\r\n var val = style[param];\r\n if (typeof val === 'function' || param === 'respectDirty' || param === '_parent') continue;\r\n this[param] = style[param];\r\n }\r\n this.respectDirty = true;\r\n this._dirty = true;\r\n }\r\n};\r\n\r\nDynamicTextStyle.prototype.ctxKey = function (char) {\r\n return [char, this.fill, this.shadow, this.stroke, this.strokeFill, this.strokeShadow].join('|');\r\n};\r\n\r\nDynamicTextStyle.prototype.ctxFont = function () {\r\n var fontSize = Math.min(200, Math.max(1, this.fontSize || 26)) + \"px \";\r\n var fontWeight = this.fontWeight === \"bold\" ? this.fontWeight + \" \" : \"\";\r\n var fontStyle = this.fontStyle === \"italic\" || this.fontStyle === \"oblique\" ? this.fontStyle + \" \" : \"\";\r\n return fontWeight + fontStyle + fontSize + this.fontFamily;\r\n};\r\n\r\nDynamicTextStyle.prototype.constructor = DynamicTextStyle;\r\nmodule.exports = DynamicTextStyle;\r\n\r\nObject.defineProperties(DynamicTextStyle.prototype, {\r\n _dirty: {\r\n set: function (val) {\r\n if (this.respectDirty) {\r\n if (this._parent !== null) {\r\n this._parent.dirtyStyle = val;\r\n this._parent.update();\r\n }\r\n }\r\n }\r\n },\r\n scale: {\r\n get: function () {\r\n return this._scale;\r\n },\r\n set: function (val) {\r\n if (val !== this._scale) {\r\n this._scale = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n align: {\r\n get: function () {\r\n return this._align;\r\n },\r\n set: function (val) {\r\n if (val !== this._align) {\r\n this._align = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontFamily: {\r\n get: function () {\r\n return this._fontFamily;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontFamily) {\r\n this._fontFamily = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontSize: {\r\n get: function () {\r\n return this._fontSize;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontSize) {\r\n this._fontSize = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontWeight: {\r\n get: function () {\r\n return this._fontWeight;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontWeight) {\r\n this._fontWeight = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontStyle: {\r\n get: function () {\r\n return this._fontStyle;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontStyle) {\r\n this._fontStyle = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n letterSpacing: {\r\n get: function () {\r\n return this._letterSpacing;\r\n },\r\n set: function (val) {\r\n if (val !== this._letterSpacing) {\r\n this._letterSpacing = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n lineHeight: {\r\n get: function () {\r\n return this._lineHeight;\r\n },\r\n set: function (val) {\r\n if (val !== this._lineHeight) {\r\n this._lineHeight = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n verticalAlign: {\r\n get: function () {\r\n return this._verticalAlign;\r\n },\r\n set: function (val) {\r\n if (val !== this._verticalAlign) {\r\n this._verticalAlign = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n rotation: {\r\n get: function () {\r\n return this._rotation;\r\n },\r\n set: function (val) {\r\n if (val !== this._rotation) {\r\n this._rotation = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n skew: {\r\n get: function () {\r\n return this._skew;\r\n },\r\n set: function (val) {\r\n if (val !== this._skew) {\r\n this._skew = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n tint: {\r\n get: function () {\r\n return this._tint;\r\n },\r\n set: function (val) {\r\n if (val !== this._tint) {\r\n this._tint = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fill: {\r\n get: function () {\r\n return this._fill;\r\n },\r\n set: function (val) {\r\n if (val !== this._fill) {\r\n this._fill = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n shadow: {\r\n get: function () {\r\n return this._shadow;\r\n },\r\n set: function (val) {\r\n if (val !== this._shadow) {\r\n this._shadow = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n stroke: {\r\n get: function () {\r\n return this._stroke;\r\n },\r\n set: function (val) {\r\n if (val !== this._stroke) {\r\n this._stroke = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n strokeFill: {\r\n get: function () {\r\n return this._strokeFill;\r\n },\r\n set: function (val) {\r\n if (val !== this._strokeFill) {\r\n this._strokeFill = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n strokeShadow: {\r\n get: function () {\r\n return this._strokeShadow;\r\n },\r\n set: function (val) {\r\n if (val !== this._strokeShadow) {\r\n this._strokeShadow = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n wrap: {\r\n get: function () {\r\n return this._wrap;\r\n },\r\n set: function (val) {\r\n if (val !== this._wrap) {\r\n this._wrap = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n breakWords: {\r\n get: function () {\r\n return this._breakWords;\r\n },\r\n set: function (val) {\r\n if (val !== this._breakWords) {\r\n this._breakWords = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n overflowX: {\r\n get: function () {\r\n return this._overflowX;\r\n },\r\n set: function (val) {\r\n if (val !== this._overflowX) {\r\n this._overflowX = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n overflowY: {\r\n get: function () {\r\n return this._overflowY;\r\n },\r\n set: function (val) {\r\n if (val !== this._overflowY) {\r\n this._overflowY = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n ellipsis: {\r\n get: function () {\r\n return this._ellipsis;\r\n },\r\n set: function (val) {\r\n if (val !== this._ellipsis) {\r\n this._ellipsis = val;\r\n this._dirty = true;\r\n }\r\n }\r\n }\r\n});","var Ease = {},\r\n EaseBase = require('./EaseBase'),\r\n ExponentialEase = require('./ExponentialEase'),\r\n HALF_PI = Math.PI * 0.5;\r\n\r\nfunction create(fn) {\r\n var e = Object.create(EaseBase.prototype);\r\n e.getPosition = fn;\r\n return e;\r\n}\r\n\r\n\r\n//Liear\r\nEase.Linear = new EaseBase();\r\n\r\n//Exponetial Eases\r\nfunction wrapEase(easeInFunction, easeOutFunction, easeInOutFunction) {\r\n return {\r\n easeIn: easeInFunction,\r\n easeOut: easeOutFunction,\r\n easeInOut: easeInOutFunction\r\n };\r\n}\r\n\r\nEase.Power0 = {\r\n \"easeNone\" : Ease.Linear,\r\n};\r\n\r\nEase.Power1 = Ease.Quad = wrapEase(\r\n new ExponentialEase(1, 1, 0),\r\n new ExponentialEase(1, 0, 1),\r\n new ExponentialEase(1, 1, 1));\r\n\r\nEase.Power2 = Ease.Cubic = wrapEase(\r\n new ExponentialEase(2, 1, 0),\r\n new ExponentialEase(2, 0, 1),\r\n new ExponentialEase(2, 1, 1));\r\n\r\nEase.Power3 = Ease.Quart = wrapEase(\r\n new ExponentialEase(3, 1, 0),\r\n new ExponentialEase(3, 0, 1),\r\n new ExponentialEase(3, 1, 1));\r\n\r\nEase.Power4 = Ease.Quint = wrapEase(\r\n new ExponentialEase(4, 1, 0),\r\n new ExponentialEase(4, 0, 1),\r\n new ExponentialEase(4, 1, 1));\r\n\r\n\r\n//Bounce\r\nEase.Bounce = {\r\n \"BounceIn\": create(function (p) {\r\n if ((p = 1 - p) < 1 / 2.75) {\r\n return 1 - (7.5625 * p * p);\r\n } else if (p < 2 / 2.75) {\r\n return 1 - (7.5625 * (p -= 1.5 / 2.75) * p + 0.75);\r\n } else if (p < 2.5 / 2.75) {\r\n return 1 - (7.5625 * (p -= 2.25 / 2.75) * p + 0.9375);\r\n }\r\n return 1 - (7.5625 * (p -= 2.625 / 2.75) * p + 0.984375);\r\n }),\r\n \"BounceOut\": create(function (p) {\r\n if (p < 1 / 2.75) {\r\n return 7.5625 * p * p;\r\n } else if (p < 2 / 2.75) {\r\n return 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\r\n } else if (p < 2.5 / 2.75) {\r\n return 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\r\n }\r\n return 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\r\n }),\r\n \"BounceInOut\": create(function (p) {\r\n var invert = (p < 0.5);\r\n if (invert) {\r\n p = 1 - (p * 2);\r\n } else {\r\n p = (p * 2) - 1;\r\n }\r\n if (p < 1 / 2.75) {\r\n p = 7.5625 * p * p;\r\n } else if (p < 2 / 2.75) {\r\n p = 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\r\n } else if (p < 2.5 / 2.75) {\r\n p = 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\r\n } else {\r\n p = 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\r\n }\r\n return invert ? (1 - p) * 0.5 : p * 0.5 + 0.5;\r\n })\r\n};\r\n\r\n//Circ\r\nEase.Circ = {\r\n \"CircIn\": create(function (p) {\r\n return -(Math.sqrt(1 - (p * p)) - 1);\r\n }),\r\n \"CircOut\": create(function (p) {\r\n return Math.sqrt(1 - (p = p - 1) * p);\r\n }),\r\n \"CircInOut\": create(function (p) {\r\n return ((p *= 2) < 1) ? -0.5 * (Math.sqrt(1 - p * p) - 1) : 0.5 * (Math.sqrt(1 - (p -= 2) * p) + 1);\r\n })\r\n};\r\n\r\n\r\n//Expo\r\nEase.Expo = {\r\n \"ExpoIn\": create(function (p) {\r\n return Math.pow(2, 10 * (p - 1)) - 0.001;\r\n }),\r\n \"ExpoOut\": create(function (p) {\r\n return 1 - Math.pow(2, -10 * p);\r\n }),\r\n \"ExpoInOut\": create(function (p) {\r\n return ((p *= 2) < 1) ? 0.5 * Math.pow(2, 10 * (p - 1)) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\r\n })\r\n};\r\n\r\n\r\n//Sine\r\nEase.Sine = {\r\n \"SineIn\": create(function (p) {\r\n return -Math.cos(p * HALF_PI) + 1;\r\n }),\r\n \"SineOut\": create(function (p) {\r\n return Math.sin(p * HALF_PI);\r\n }),\r\n \"SineInOut\": create(function (p) {\r\n return -0.5 * (Math.cos(Math.PI * p) - 1);\r\n })\r\n};\r\n\r\n\r\nmodule.exports = Ease;\r\n\r\n\r\n","function EaseBase() {\r\n this.getPosition = function (p) {\r\n return p;\r\n };\r\n}\r\n\r\nEaseBase.prototype.constructor = EaseBase;\r\nmodule.exports = EaseBase;\r\n\r\n\r\n\r\n","var EaseBase = require('./EaseBase');\r\n\r\nfunction ExponentialEase(power, easeIn, easeOut) {\r\n var pow = power;\r\n var t = easeIn && easeOut ? 3 : easeOut ? 1 : 2;\r\n this.getPosition = function (p) {\r\n var r = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2;\n if (pow === 1) {\r\n r *= r;\r\n } else if (pow === 2) {\r\n r *= r * r;\r\n } else if (pow === 3) {\r\n r *= r * r * r;\r\n } else if (pow === 4) {\r\n r *= r * r * r * r;\r\n }\n return (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2);\r\n };\r\n}\r\n\r\nExponentialEase.prototype = Object.create(EaseBase.prototype);\r\nExponentialEase.prototype.constructor = ExponentialEase;\r\nmodule.exports = ExponentialEase;\r\n\r\n\r\n\r\n","var UIBase = require('./UIBase'),\r\n InputController = require('./Interaction/InputController'),\r\n ClickEvent = require('./Interaction/ClickEvent');\r\n/**\r\n * base object for all Input type objects\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param width {number} passed to uibase\r\n * @param height {number} passed to uibase\r\n * @param tabIndex {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for input\r\n */\r\nfunction InputBase(width, height, tabIndex, tabGroup) {\r\n UIBase.call(this, width, height);\r\n var self = this;\r\n this._focused = false;\r\n this._useTab = this._usePrev = this._useNext = true;\r\n this.container.interactive = true;\r\n InputController.registrer(this, tabIndex, tabGroup);\r\n\r\n\r\n var keyDownEvent = function (e) {\r\n if (e.which === 9) {\r\n if (self._useTab) {\r\n InputController.fireTab();\r\n e.preventDefault();\r\n }\r\n }\r\n else if (e.which === 38) {\r\n if (self._usePrev) {\r\n InputController.firePrev();\r\n e.preventDefault();\r\n }\r\n }\r\n else if (e.which === 40) {\r\n if (self._useNext) {\r\n InputController.fireNext();\r\n e.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n var documentMouseDown = function (e) {\r\n if (!self.__down)\r\n self.blur();\r\n };\r\n\r\n this.container.on(\"pointerdown\", function (e) {\r\n self.focus();\r\n self.__down = true;\r\n });\r\n\r\n this.container.on(\"pointerup\", function (e) {\r\n self.__down = false;\r\n });\r\n\r\n this.container.on(\"pointerupoutside\", function (e) {\r\n self.__down = false;\r\n });\r\n\r\n //var cancelFocusEvent = new ClickEvent(this.stage)\r\n\r\n this._bindEvents = function () {\r\n if (this.stage !== null) {\r\n this.stage.on(\"pointerdown\", documentMouseDown);\r\n document.addEventListener(\"keydown\", keyDownEvent);\r\n }\r\n };\r\n\r\n this._clearEvents = function () {\r\n if (this.stage !== null) {\r\n this.stage.off(\"pointerdown\", documentMouseDown);\r\n document.removeEventListener(\"keydown\", keyDownEvent);\r\n }\r\n };\r\n}\r\n\r\nInputBase.prototype = Object.create(UIBase.prototype);\r\nInputBase.prototype.constructor = InputBase;\r\nmodule.exports = InputBase;\r\n\r\nInputBase.prototype.focus = function () {\r\n if (!this._focused) {\r\n this._focused = true;\r\n this._bindEvents();\r\n InputController.set(this);\r\n this.emit(\"focusChanged\", true);\r\n this.emit(\"focus\");\r\n\r\n }\r\n};\r\n\r\nInputBase.prototype.blur = function () {\r\n if (this._focused) {\r\n InputController.clear();\r\n this._focused = false;\r\n this._clearEvents();\r\n this.emit(\"focusChanged\", false);\r\n this.emit(\"blur\");\r\n\r\n }\r\n};","var ClickEvent = function (obj) {\r\n var bound = false,\r\n self = this,\r\n id = 0,\r\n ishover = false;\r\n\r\n obj.container.interactive = true;\r\n\r\n var _onMouseDown = function (event) {\r\n id = event.data.identifier;\r\n self.onPress.call(obj, event, true);\r\n if (!bound) {\r\n obj.container.on('mouseup', _onMouseUp);\r\n obj.container.on('mouseupoutside', _onMouseUpOutside);\r\n obj.container.on('touchend', _onMouseUp);\r\n obj.container.on('touchendoutside', _onMouseUpOutside);\r\n bound = true;\r\n }\r\n };\r\n\r\n var _mouseUpAll = function (event) {\r\n if (event.data.identifier !== id) return;\r\n if (bound) {\r\n obj.container.removeListener('mouseup', _onMouseUp);\r\n obj.container.removeListener('mouseupoutside', _onMouseUpOutside);\r\n obj.container.removeListener('touchend', _onMouseUp);\r\n obj.container.removeListener('touchendoutside', _onMouseUpOutside);\r\n bound = false;\r\n }\r\n self.onPress.call(obj, event, false);\r\n };\r\n\r\n var _onMouseUp = function (event) {\r\n if (event.data.identifier !== id) return;\r\n _mouseUpAll(event);\r\n self.onClick.call(obj, event);\r\n };\r\n\r\n var _onMouseUpOutside = function (event) {\r\n if (event.data.identifier !== id) return;\r\n _mouseUpAll(event);\r\n };\r\n\r\n var _onMouseOver = function (event) {\r\n if (!ishover) {\r\n ishover = true;\r\n self.onHover.call(obj, event);\r\n }\r\n };\r\n\r\n var _onMouseOut = function (event) {\r\n if (ishover) {\r\n ishover = false;\r\n self.onLeave.call(obj, event);\r\n }\r\n };\r\n\r\n this.stopEvent = function () {\r\n if (bound) {\r\n obj.container.removeListener('mouseup', _onMouseUp);\r\n obj.container.removeListener('mouseupoutside', _onMouseUpOutside);\r\n obj.container.removeListener('touchend', _onMouseUp);\r\n obj.container.removeListener('touchendoutside', _onMouseUpOutside);\r\n bound = false;\r\n }\r\n obj.container.removeListener('mousedown', _onMouseDown);\r\n obj.container.removeListener('touchstart', _onMouseDown);\r\n obj.container.removeListener('mouseover', _onMouseOver);\r\n obj.container.removeListener('mouseout', _onMouseOut);\r\n };\r\n\r\n this.startEvent = function () {\r\n obj.container.on('mousedown', _onMouseDown);\r\n obj.container.on('touchstart', _onMouseDown);\r\n obj.container.on('mouseover', _onMouseOver);\r\n obj.container.on('mouseout', _onMouseOut);\r\n };\r\n\r\n this.startEvent();\r\n};\r\n\r\nClickEvent.prototype.constructor = ClickEvent;\r\nmodule.exports = ClickEvent;\r\n\r\nClickEvent.prototype.onHover = function (event) { };\r\nClickEvent.prototype.onLeave = function (event) { };\r\nClickEvent.prototype.onPress = function (event, isPressed) { };\r\nClickEvent.prototype.onClick = function (event) { };","var _items = [];\r\nvar DragDropController = {\r\n add: function (item, event) {\r\n item._dragDropEventId = event.data.identifier;\r\n if (_items.indexOf(item) === -1) {\r\n _items.push(item);\r\n return true;\r\n }\r\n return false;\r\n },\r\n getItem: function (object) {\r\n var item = null, index;\r\n for (var i = 0; i < _items.length; i++) {\r\n if (_items[i] === object) {\r\n item = _items[i];\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (item !== null) {\r\n _items.splice(index, 1);\r\n return item;\r\n }\r\n else {\r\n return false;\r\n }\r\n },\r\n getEventItem: function (event, group) {\r\n var item = null, index, id = event.data.identifier;\r\n for (var i = 0; i < _items.length; i++) {\r\n if (_items[i]._dragDropEventId === id) {\r\n if (group !== _items[i].dragGroup) {\r\n return false;\r\n }\r\n item = _items[i];\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (item !== null) {\r\n _items.splice(index, 1);\r\n return item;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n};\r\n\r\nmodule.exports = DragDropController;","var DragEvent = function (obj) {\r\n var bound = false,\r\n start = new PIXI.Point(),\r\n offset = new PIXI.Point(),\r\n mouse = new PIXI.Point(),\r\n movementX = 0,\r\n movementY = 0,\r\n cancel = false,\r\n dragging = false,\r\n self = this,\r\n id = 0;\r\n\r\n obj.container.interactive = true;\r\n\r\n var _onDragStart = function (e) {\r\n id = e.data.identifier;\r\n self.onPress.call(obj, e, true);\r\n if (!bound) {\r\n start.copy(e.data.global);\r\n obj.stage.on('mousemove', _onDragMove);\r\n obj.stage.on('touchmove', _onDragMove);\r\n obj.stage.on('mouseup', _onDragEnd);\r\n obj.stage.on('mouseupoutside', _onDragEnd);\r\n obj.stage.on('touchend', _onDragEnd);\r\n obj.stage.on('touchendoutside', _onDragEnd);\r\n obj.stage.on('touchcancel', _onDragEnd);\r\n bound = true;\r\n }\r\n };\r\n\r\n var _onDragMove = function (event) {\r\n if (event.data.identifier !== id) return;\r\n mouse.copy(event.data.global);\r\n offset.set(mouse.x - start.x, mouse.y - start.y);\r\n if (!dragging) {\r\n movementX = Math.abs(offset.x);\r\n movementY = Math.abs(offset.y);\r\n if (movementX === 0 && movementY === 0 || Math.max(movementX, movementY) < obj.dragThreshold) return; //thresshold\r\n if (obj.dragRestrictAxis !== null) {\r\n cancel = false;\r\n if (obj.dragRestrictAxis == \"x\" && movementY > movementX) cancel = true;\r\n else if (obj.dragRestrictAxis == \"y\" && movementY <= movementX) cancel = true;\r\n if (cancel) {\r\n _onDragEnd(event);\r\n return;\r\n }\r\n }\r\n self.onDragStart.call(obj, event);\r\n dragging = true;\r\n }\r\n self.onDragMove.call(obj, event, offset);\r\n };\r\n\r\n var _onDragEnd = function (event) {\r\n if (event.data.identifier !== id) return;\r\n if (bound) {\r\n obj.stage.removeListener('mousemove', _onDragMove);\r\n obj.stage.removeListener('touchmove', _onDragMove);\r\n obj.stage.removeListener('mouseup', _onDragEnd);\r\n obj.stage.removeListener('mouseupoutside', _onDragEnd);\r\n obj.stage.removeListener('touchend', _onDragEnd);\r\n obj.stage.removeListener('touchendoutside', _onDragEnd);\r\n obj.stage.removeListener('touchcancel', _onDragEnd);\r\n dragging = false;\r\n bound = false;\r\n self.onDragEnd.call(obj, event);\r\n self.onPress.call(obj, event, false);\r\n\r\n }\r\n };\r\n\r\n this.stopEvent = function () {\r\n if (bound) {\r\n obj.stage.removeListener('mousemove', _onDragMove);\r\n obj.stage.removeListener('touchmove', _onDragMove);\r\n obj.stage.removeListener('mouseup', _onDragEnd);\r\n obj.stage.removeListener('mouseupoutside', _onDragEnd);\r\n obj.stage.removeListener('touchend', _onDragEnd);\r\n obj.stage.removeListener('touchendoutside', _onDragEnd);\r\n bound = false;\r\n }\r\n obj.container.removeListener('mousedown', _onDragStart);\r\n obj.container.removeListener('touchstart', _onDragStart);\r\n };\r\n\r\n this.startEvent = function () {\r\n obj.container.on('mousedown', _onDragStart);\r\n obj.container.on('touchstart', _onDragStart);\r\n };\r\n\r\n this.startEvent();\r\n};\r\n\r\nDragEvent.prototype.constructor = DragEvent;\r\nmodule.exports = DragEvent;\r\n\r\nDragEvent.prototype.onPress = function (event, isPressed) { };\r\nDragEvent.prototype.onDragEnd = function (event) { };\r\nDragEvent.prototype.onDragMove = function (event, offset) { };\r\nDragEvent.prototype.onDragStart = function (event) { };","var _currentItem;\r\nvar tabGroups = {};\r\nvar checkGroups = {};\r\nvar checkGroupValues = {};\r\n\r\nvar InputController = {\r\n registrer: function (item, tabIndex, tabGroup) {\r\n var groupName = tabGroup || \"default\";\r\n\r\n var items = tabGroups[groupName];\r\n if (!items)\r\n items = tabGroups[groupName] = [];\r\n\r\n var i = items.indexOf(item);\r\n if (i === -1) {\r\n item._tabIndex = tabIndex !== undefined ? tabIndex : -1;\r\n item._tabGroup = items;\r\n items.push(item);\r\n items.sort(function (a, b) {\r\n if (a._tabIndex < b._tabIndex)\r\n return -1;\r\n if (a._tabIndex > b._tabIndex)\r\n return 1;\r\n return 0;\r\n });\r\n }\r\n },\r\n set: function (item) {\r\n if (_currentItem && typeof _currentItem.blur === \"function\")\r\n _currentItem.blur();\r\n _currentItem = item;\r\n },\r\n clear: function () {\r\n _currentItem = undefined;\r\n },\r\n fireTab: function () {\r\n if (_currentItem) {\r\n var i = _currentItem._tabGroup.indexOf(_currentItem) + 1;\r\n if (i >= _currentItem._tabGroup.length) i = 0;\r\n _currentItem._tabGroup[i].focus();\r\n }\r\n },\r\n fireNext: function () {\r\n if (_currentItem) {\r\n var i = _currentItem._tabGroup.indexOf(_currentItem) + 1;\r\n if (i >= _currentItem._tabGroup.length) i = _currentItem._tabGroup.length - 1;\r\n _currentItem._tabGroup[i].focus();\r\n }\r\n },\r\n firePrev: function () {\r\n if (_currentItem) {\r\n var i = _currentItem._tabGroup.indexOf(_currentItem) - 1;\r\n if (i < 0) i = 0;\r\n _currentItem._tabGroup[i].focus();\r\n }\r\n },\r\n registrerCheckGroup: function (cb) {\r\n var name = cb.checkGroup;\r\n var group = checkGroups[name];\r\n if (!group) group = checkGroups[name] = {};\r\n group[cb.value] = cb;\r\n\r\n if (cb.checked)\r\n checkGroupValues[name] = cb.value;\r\n },\r\n updateCheckGroupSelected: function (cb) {\r\n var group = checkGroups[cb.checkGroup];\r\n for (var val in group) {\r\n var b = group[val];\r\n if (b !== cb)\r\n b.checked = false;\r\n }\r\n checkGroupValues[cb.checkGroup] = cb.value;\r\n },\r\n getCheckGroupSelectedValue: function (name) {\r\n if (checkGroupValues[name])\r\n return checkGroupValues[name];\r\n return \"\";\r\n },\r\n setCheckGroupSelectedValue: function (name, val) {\r\n var group = checkGroups[name];\r\n if (group) {\r\n var cb = group[val];\r\n if (cb) {\r\n cb.checked = true;\r\n }\r\n }\r\n }\r\n};\r\n\r\nmodule.exports = InputController;","var Interaction = {\r\n ClickEvent: require('./ClickEvent'),\r\n DragEvent: require('./DragEvent'),\r\n MouseScrollEvent: require('./MouseScrollEvent')\r\n};\r\n\r\n\r\nmodule.exports = Interaction;","var MouseScrollEvent = function (obj, preventDefault) {\r\n var bound = false, delta = new PIXI.Point(), self = this;\r\n obj.container.interactive = true;\r\n\r\n var _onMouseScroll = function (event) {\r\n if (preventDefault)\r\n event.preventDefault();\r\n\r\n delta.set(event.deltaX, event.deltaY);\r\n self.onMouseScroll.call(obj, event, delta);\r\n };\r\n\r\n var _onHover = function (event) {\r\n if (!bound) {\r\n document.addEventListener(\"mousewheel\", _onMouseScroll, false);\r\n document.addEventListener(\"DOMMouseScroll\", _onMouseScroll, false);\r\n bound = true;\r\n }\r\n };\r\n\r\n var _onMouseOut = function (event) {\r\n if (bound) {\r\n document.removeEventListener(\"mousewheel\", _onMouseScroll);\r\n document.removeEventListener(\"DOMMouseScroll\", _onMouseScroll);\r\n bound = false;\r\n }\r\n };\r\n\r\n this.stopEvent = function () {\r\n if (bound) {\r\n document.removeEventListener(\"mousewheel\", _onMouseScroll);\r\n document.removeEventListener(\"DOMMouseScroll\", _onMouseScroll);\r\n bound = false;\r\n }\r\n obj.container.removeListener('mouseover', _onHover);\r\n obj.container.removeListener('mouseout', _onMouseOut);\r\n };\r\n\r\n this.startEvent = function () {\r\n obj.container.on('mouseover', _onHover);\r\n obj.container.on('mouseout', _onMouseOut);\r\n };\r\n\r\n this.startEvent();\r\n\r\n \r\n};\r\n\r\nMouseScrollEvent.prototype.constructor = MouseScrollEvent;\r\nmodule.exports = MouseScrollEvent;\r\n\r\nMouseScrollEvent.prototype.onMouseScroll = function (event, delta) { };","var MathHelper = {\r\n Lerp: function (start, stop, amt) {\r\n if (amt > 1) amt = 1;\r\n else if (amt < 0) amt = 0;\r\n return start + (stop - start) * amt;\r\n },\r\n Round: function(number, decimals) {\r\n var pow = Math.pow(10, decimals);\r\n return Math.round(number * pow) / pow;\r\n }\r\n};\r\n\r\nmodule.exports = MathHelper;","var Slider = require('./Slider'),\r\n Tween = require('./Tween'),\r\n Ease = require('./Ease/Ease');\r\n\r\n/**\r\n* An UI scrollbar to control a ScrollingContainer\r\n* \r\n* @class\r\n* @extends PIXI.UI.Slider\r\n* @memberof PIXI.UI\r\n* @param options {Object} ScrollBar settings\r\n* @param options.track {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} Any type of UIOBject, will be used for the scrollbar track\r\n* @param options.handle {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as scrollbar handle\r\n* @param options.scrollingContainer {PIXI.UI.ScrollingContainer} The container to control\r\n* @param [options.vertical=false] {boolean} Direction of the scrollbar\r\n* @param [options.autohide=false] {boolean} Hides the scrollbar when not needed\r\n*\r\n*/\r\nfunction ScrollBar(options) {\r\n Slider.call(this, { track: options.track, handle: options.handle, fill: null, vertical: options.vertical });\r\n this.scrollingContainer = options.scrollingContainer;\r\n this.autohide = options.autohide;\r\n this._hidden = false;\r\n\r\n}\r\n\r\nScrollBar.prototype = Object.create(Slider.prototype);\r\nScrollBar.prototype.constructor = ScrollBar;\r\nmodule.exports = ScrollBar;\r\n\r\n\r\nScrollBar.prototype.initialize = function () {\r\n Slider.prototype.initialize.call(this);\r\n this.decimals = 3; //up decimals to trigger ValueChanging more often\r\n\r\n this._onValueChanging = function (val) {\r\n var sizeAmt = this.scrollingContainer._height / this.scrollingContainer.innerContainer.height || 0.001;\r\n if (sizeAmt < 1)\r\n this.scrollingContainer.forcePctPosition(this.vertical ? \"y\" : \"x\", this._amt);\r\n };\r\n\r\n this.scrollingContainer._scrollBars.push(this);\r\n\r\n};\r\n\r\nScrollBar.prototype.alignToContainer = function () {\r\n var newPos,\r\n size,\r\n x_y = this.vertical ? \"y\" : \"x\",\r\n width_height = this.vertical ? \"height\" : \"width\",\r\n top_left = this.vertical ? \"top\" : \"left\",\r\n _posAmt = !this.scrollingContainer.innerContainer[width_height] ? 0 : -(this.scrollingContainer.innerContainer[x_y] / this.scrollingContainer.innerContainer[width_height]),\r\n sizeAmt = !this.scrollingContainer.innerContainer[width_height] ? 1 : this.scrollingContainer[\"_\" + width_height] / this.scrollingContainer.innerContainer[width_height];\r\n\r\n //update amt\r\n this._amt = !this.scrollingContainer[\"_\" + width_height] ? 0 : -(this.scrollingContainer.innerContainer[x_y] / (this.scrollingContainer.innerContainer[width_height] - this.scrollingContainer[\"_\" + width_height]));\r\n\r\n if (sizeAmt >= 1) {\r\n size = this[\"_\" + width_height];\r\n this.handle[top_left] = size * 0.5;\r\n this.toggleHidden(true);\r\n }\r\n else {\r\n size = this[\"_\" + width_height] * sizeAmt;\r\n if (this._amt > 1) size -= (this[\"_\" + width_height] - size) * (this._amt - 1);\r\n else if (this._amt < 0) size -= (this[\"_\" + width_height] - size) * -this._amt;\r\n if (this._amt < 0) newPos = size * 0.5;\r\n else if (this._amt > 1) newPos = this[\"_\" + width_height] - size * 0.5;\r\n else newPos = (_posAmt * this.scrollingContainer[\"_\" + width_height]) + (size * 0.5);\r\n this.handle[top_left] = newPos;\r\n this.toggleHidden(false);\r\n }\r\n this.handle[width_height] = size;\r\n};\r\n\r\n\r\nScrollBar.prototype.toggleHidden = function (hidden) {\r\n if (this.autohide) {\r\n if (hidden && !this._hidden) {\r\n Tween.to(this, 0.2, { alpha: 0 });\r\n this._hidden = true;\r\n }\r\n else if (!hidden && this._hidden) {\r\n Tween.to(this, 0.2, { alpha: 1 });\r\n this._hidden = false;\r\n }\r\n }\r\n};\r\n\r\n\r\n\r\n\r\n","var UIBase = require('./UIBase'),\r\n Container = require('./Container'),\r\n MathHelper = require('./MathHelper'),\r\n Ticker = require('./Ticker'),\r\n DragEvent = require('./Interaction/DragEvent'),\r\n MouseScrollEvent = require('./Interaction/MouseScrollEvent');\r\n\r\n\r\n/**\r\n * An UI Container object with expandMask hidden and possibility to enable scrolling\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param [options.scrollX=false] {Boolean} Enable horizontal scrolling\r\n * @param [options.scrollY=false] {Boolean} Enable vertical scrolling\r\n * @param [options.dragScrolling=true] {Boolean} Enable mousedrag scrolling\r\n * @param [options.softness=0.5] {Number} (0-1) softness of scrolling\r\n * @param [options.width=0] {Number|String} container width \r\n * @param [options.height=0] {Number} container height \r\n * @param [options.radius=0] {Number} corner radius of clipping mask\r\n * @param [options.expandMask=0] {Number} mask expand (px)\r\n * @param [options.overflowY=0] {Number} how much can be scrolled past content dimensions\r\n * @param [options.overflowX=0] {Number} how much can be scrolled past content dimensions\r\n */\r\nfunction ScrollingContainer(options) {\r\n options = options || {};\r\n Container.call(this, options.width, options.height);\r\n this.mask = new PIXI.Graphics();\r\n this.innerContainer = new PIXI.Container();\r\n this.innerBounds = new PIXI.Rectangle();\r\n this.container.addChild(this.mask);\r\n this.container.addChild(this.innerContainer);\r\n this.container.mask = this.mask;\r\n this.scrollX = options.scrollX !== undefined ? options.scrollX : false;\r\n this.scrollY = options.scrollY !== undefined ? options.scrollY : true;\r\n this.dragScrolling = options.dragScrolling !== undefined ? options.dragScrolling : true;\r\n this.softness = options.softness !== undefined ? Math.max(Math.min(options.softness || 0, 1), 0) : 0.5;\r\n this.radius = options.radius || 0;\r\n this.expandMask = options.expandMask || 0;\r\n this.overflowY = options.overflowY || 0;\r\n this.overflowX = options.overflowX || 0;\r\n\r\n this.animating = false;\r\n this.scrolling = false;\r\n this._scrollBars = [];\r\n\r\n this.boundCached = performance.now() - 1000;\r\n}\r\n\r\n\r\nScrollingContainer.prototype = Object.create(Container.prototype);\r\nScrollingContainer.prototype.constructor = ScrollingContainer;\r\nmodule.exports = ScrollingContainer;\r\n\r\n\r\nScrollingContainer.prototype.initialize = function () {\r\n Container.prototype.initialize.apply(this);\r\n if (this.scrollX || this.scrollY) {\r\n this.initScrolling();\r\n }\r\n};\r\n\r\nScrollingContainer.prototype.update = function () {\r\n Container.prototype.update.apply(this);\r\n if (this._lastWidth != this._width || this._lastHeight != this._height) {\r\n var of = this.expandMask;\r\n this.mask.clear();\r\n this.mask.lineStyle(0);\r\n this.mask.beginFill(0xFFFFFF, 1);\r\n if (this.radius === 0) {\r\n\r\n //this.mask.drawRect(0, 0, this._width, this._height);\r\n //this.mask.drawRect(-of, -of, this._width + of, this.height + of);\r\n //this.mask.moveTo(-of, -of);\r\n //this.mask.lineTo(this._width + of, -of);\r\n //this.mask.lineTo(this._width + of, this._height + of);\r\n //this.mask.lineTo(-of, this._height + of);\r\n this.mask.drawRect(-of, -of, this._width + of, this._height + of);\r\n }\r\n else {\r\n this.mask.drawRoundedRect(-of, -of, this._width + of, this.height + of, this.radius);\r\n }\r\n this.mask.endFill();\r\n this._lastWidth = this._width;\r\n this._lastHeight = this._height;\r\n }\r\n\r\n\r\n if (this.setScrollPosition) {\r\n this.setScrollPosition();\r\n }\r\n};\r\n\r\nScrollingContainer.prototype.addChild = function (UIObject) {\r\n var argumentsLength = arguments.length;\r\n if (argumentsLength > 1) {\r\n for (var i = 0; i < argumentsLength; i++) {\r\n this.addChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n Container.prototype.addChild.call(this, UIObject);\r\n this.innerContainer.addChild(UIObject.container);\r\n this.getInnerBounds(true); //make sure bounds is updated instantly when a child is added\r\n }\r\n return UIObject;\r\n};\r\n\r\n\r\nScrollingContainer.prototype.updateScrollBars = function () {\r\n for (var i = 0; i < this._scrollBars.length; i++) {\r\n this._scrollBars[i].alignToContainer();\r\n }\r\n};\r\n\r\n\r\nScrollingContainer.prototype.getInnerBounds = function (force) {\r\n //this is a temporary fix, because we cant rely on innercontainer height if the children is positioned > 0 y.\r\n if (force || performance.now() - this.boundCached > 1000) {\r\n this.innerContainer.getLocalBounds(this.innerBounds);\r\n this.innerContainer.getLocalBounds(this.innerBounds);\r\n this.innerBounds.height = this.innerBounds.y + this.innerContainer.height;\r\n this.innerBounds.width = this.innerBounds.x + this.innerContainer.width;\r\n this.boundCached = performance.now();\r\n }\r\n\r\n return this.innerBounds;\r\n};\r\n\r\nScrollingContainer.prototype.initScrolling = function () {\r\n var container = this.innerContainer,\r\n containerStart = new PIXI.Point(),\r\n targetPosition = new PIXI.Point(),\r\n lastPosition = new PIXI.Point(),\r\n Position = new PIXI.Point(),\r\n Speed = new PIXI.Point(),\r\n stop,\r\n self = this;\r\n\r\n this.forcePctPosition = function (direction, pct) {\r\n var bounds = this.getInnerBounds();\r\n\r\n if (this.scrollX && direction == \"x\") {\r\n container.position[direction] = -((bounds.width - this._width) * pct);\r\n }\r\n if (this.scrollY && direction == \"y\") {\r\n container.position[direction] = -((bounds.height - this._height) * pct);\r\n }\r\n Position[direction] = targetPosition[direction] = container.position[direction];\r\n };\r\n\r\n this.focusPosition = function (pos) {\r\n var bounds = this.getInnerBounds();\r\n\r\n var dif;\r\n if (this.scrollX) {\r\n var x = Math.max(0, (Math.min(bounds.width, pos.x)));\r\n if (x + container.x > this._width) {\r\n dif = x - this._width;\r\n container.x = -dif;\r\n }\r\n else if (x + container.x < 0) {\r\n dif = x + container.x;\r\n container.x -= dif;\r\n }\r\n }\r\n\r\n if (this.scrollY) {\r\n var y = Math.max(0, (Math.min(bounds.height, pos.y)));\r\n\r\n if (y + container.y > this._height) {\r\n dif = y - this._height;\r\n container.y = -dif;\r\n }\r\n else if (y + container.y < 0) {\r\n dif = y + container.y;\r\n container.y -= dif;\r\n }\r\n }\r\n\r\n lastPosition.copy(container.position);\r\n targetPosition.copy(container.position);\r\n Position.copy(container.position);\r\n this.updateScrollBars();\r\n\r\n };\r\n\r\n this.setScrollPosition = function (speed) {\r\n if (speed) {\r\n Speed = speed;\r\n }\r\n\r\n if (!this.animating) {\r\n this.animating = true;\r\n lastPosition.copy(container.position);\r\n targetPosition.copy(container.position);\r\n Ticker.on(\"update\", this.updateScrollPosition, this);\r\n }\r\n };\r\n\r\n this.updateScrollPosition = function (delta) {\r\n stop = true;\r\n if (this.scrollX) this.updateDirection(\"x\", delta);\r\n if (this.scrollY) this.updateDirection(\"y\", delta);\r\n if (stop) {\r\n Ticker.removeListener(\"update\", this.updateScrollPosition);\r\n this.animating = false;\r\n }\r\n };\r\n\r\n\r\n\r\n this.updateDirection = function (direction, delta) {\r\n var bounds = this.getInnerBounds();\r\n\r\n var min;\r\n if (direction == \"y\")\r\n min = Math.round(Math.min(0, this._height - bounds.height));\r\n else\r\n min = Math.round(Math.min(0, this._width - bounds.width));\r\n\r\n if (!this.scrolling && Math.round(Speed[direction]) !== 0) {\r\n targetPosition[direction] += Speed[direction];\r\n Speed[direction] = MathHelper.Lerp(Speed[direction], 0, (5 + 2.5 / Math.max(this.softness, 0.01)) * delta);\r\n\r\n if (targetPosition[direction] > 0) {\r\n targetPosition[direction] = 0;\r\n\r\n }\r\n else if (targetPosition[direction] < min) {\r\n targetPosition[direction] = min;\r\n\r\n }\r\n }\r\n\r\n if (!this.scrolling && Math.round(Speed[direction]) === 0 && (container[direction] > 0 || container[direction] < min)) {\r\n var target = Position[direction] > 0 ? 0 : min;\r\n Position[direction] = MathHelper.Lerp(Position[direction], target, (40 - (30 * this.softness)) * delta);\r\n stop = false;\r\n }\r\n else if (this.scrolling || Math.round(Speed[direction]) !== 0) {\r\n\r\n if (this.scrolling) {\r\n Speed[direction] = Position[direction] - lastPosition[direction];\r\n lastPosition.copy(Position);\r\n }\r\n if (targetPosition[direction] > 0) {\r\n Speed[direction] = 0;\r\n Position[direction] = 100 * this.softness * (1 - Math.exp(targetPosition[direction] / -200));\r\n }\r\n else if (targetPosition[direction] < min) {\r\n Speed[direction] = 0;\r\n Position[direction] = min - (100 * this.softness * (1 - Math.exp((min - targetPosition[direction]) / -200)));\r\n }\r\n else {\r\n Position[direction] = targetPosition[direction];\r\n }\r\n stop = false;\r\n }\r\n\r\n container.position[direction] = Math.round(Position[direction]);\r\n\r\n self.updateScrollBars();\r\n\r\n };\r\n\r\n\r\n //Drag scroll\r\n if (this.dragScrolling) {\r\n var drag = new DragEvent(this);\r\n drag.onDragStart = function (e) {\r\n if (!this.scrolling) {\r\n containerStart.copy(container.position);\r\n Position.copy(container.position);\r\n this.scrolling = true;\r\n this.setScrollPosition();\r\n }\r\n };\r\n\r\n drag.onDragMove = function (e, offset) {\r\n if (this.scrollX)\r\n targetPosition.x = containerStart.x + offset.x;\r\n if (this.scrollY)\r\n targetPosition.y = containerStart.y + offset.y;\r\n };\r\n\r\n drag.onDragEnd = function (e) {\r\n this.scrolling = false;\r\n };\r\n }\r\n\r\n //Mouse scroll\r\n var scrollSpeed = new PIXI.Point();\r\n var scroll = new MouseScrollEvent(this, true);\r\n scroll.onMouseScroll = function (e, delta) {\r\n scrollSpeed.set(-delta.x * 0.2, -delta.y * 0.2);\r\n this.setScrollPosition(scrollSpeed);\r\n };\r\n\r\n\r\n self.updateScrollBars();\r\n\r\n\r\n};\r\n\r\n\r\n\r\n\r\n","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * A sliced sprite with dynamic width and height.\r\n *\r\n * @class\r\n * @memberof PIXI.UI\r\n * @param Texture {PIXI.Texture} the texture for this SliceSprite\r\n * @param BorderWidth {Number} Width of the sprite borders\r\n * @param horizontalSlice {Boolean} Slice the sprite horizontically\r\n * @param verticalSlice {Boolean} Slice the sprite vertically\r\n * @param [tile=false] {Boolean} tile or streach\r\n */\r\nfunction SliceSprite(texture, borderWidth, horizontalSlice, verticalSlice, tile) {\r\n UIBase.call(this, texture.width, texture.height);\r\n\r\n var ftl, ftr, fbl, fbr, ft, fb, fl, fr, ff, stl, str, sbl, sbr, st, sb, sl, sr, sf,\r\n bw = borderWidth || 5,\r\n vs = typeof verticalSlice !== \"undefined\" ? verticalSlice : true,\r\n hs = typeof horizontalSlice !== \"undefined\" ? horizontalSlice : true,\r\n t = texture.baseTexture,\r\n f = texture.frame;\r\n\r\n\r\n if (hs) this.setting.minWidth = borderWidth * 2;\r\n if (vs) this.setting.minHeight = borderWidth * 2;\r\n\r\n this.initialize = function () {\r\n UIBase.prototype.initialize.apply(this);\r\n\r\n //get frames\r\n if (vs && hs) {\r\n ftl = new PIXI.Rectangle(f.x, f.y, bw, bw);\r\n ftr = new PIXI.Rectangle(f.x + f.width - bw, f.y, bw, bw);\r\n fbl = new PIXI.Rectangle(f.x, f.y + f.height - bw, bw, bw);\r\n fbr = new PIXI.Rectangle(f.x + f.width - bw, f.y + f.height - bw, bw, bw);\r\n ft = new PIXI.Rectangle(f.x + bw, f.y, f.width - bw * 2, bw);\r\n fb = new PIXI.Rectangle(f.x + bw, f.y + f.height - bw, f.width - bw * 2, bw);\r\n fl = new PIXI.Rectangle(f.x, f.y + bw, bw, f.height - bw * 2);\r\n fr = new PIXI.Rectangle(f.x + f.width - bw, f.y + bw, bw, f.height - bw * 2);\r\n ff = new PIXI.Rectangle(f.x + bw, f.y + bw, f.width - bw * 2, f.height - bw * 2);\r\n }\r\n else if (hs) {\r\n fl = new PIXI.Rectangle(f.x, f.y, bw, f.height);\r\n fr = new PIXI.Rectangle(f.x + f.width - bw, f.y, bw, f.height);\r\n ff = new PIXI.Rectangle(f.x + bw, f.y, f.width - bw * 2, f.height);\r\n }\r\n else { //vs\r\n ft = new PIXI.Rectangle(f.x, f.y, f.width, bw);\r\n fb = new PIXI.Rectangle(f.x, f.y + f.height - bw, f.width, bw);\r\n ff = new PIXI.Rectangle(f.x, f.y + bw, f.width, f.height - bw * 2);\r\n }\r\n\r\n //TODO: swap frames if rotation\r\n\r\n\r\n\r\n //make sprites\r\n sf = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, ff)) : new PIXI.Sprite(new PIXI.Texture(t, ff));\r\n this.container.addChildAt(sf, 0);\r\n if (vs && hs) {\r\n stl = new PIXI.Sprite(new PIXI.Texture(t, ftl));\r\n str = new PIXI.Sprite(new PIXI.Texture(t, ftr));\r\n sbl = new PIXI.Sprite(new PIXI.Texture(t, fbl));\r\n sbr = new PIXI.Sprite(new PIXI.Texture(t, fbr));\r\n this.container.addChildAt(stl, 0);\r\n this.container.addChildAt(str, 0);\r\n this.container.addChildAt(sbl, 0);\r\n this.container.addChildAt(sbr, 0);\r\n\r\n }\r\n if (hs) {\r\n sl = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, fl)) : new PIXI.Sprite(new PIXI.Texture(t, fl));\r\n sr = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, fr)) : new PIXI.Sprite(new PIXI.Texture(t, fr));\r\n this.container.addChildAt(sl, 0);\r\n this.container.addChildAt(sr, 0);\r\n }\r\n if (vs) {\r\n st = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, ft)) : new PIXI.Sprite(new PIXI.Texture(t, ft));\r\n sb = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, fb)) : new PIXI.Sprite(new PIXI.Texture(t, fb));\r\n this.container.addChildAt(st, 0);\r\n this.container.addChildAt(sb, 0);\r\n }\r\n\r\n //set constant position and sizes\r\n if (vs && hs) st.x = sb.x = sl.y = sr.y = stl.width = str.width = sbl.width = sbr.width = stl.height = str.height = sbl.height = sbr.height = bw;\r\n if (hs) sf.x = sl.width = sr.width = bw;\r\n if (vs) sf.y = st.height = sb.height = bw;\r\n };\r\n\r\n /**\r\n * Updates the sliced sprites position and size\r\n *\r\n * @private\r\n */\r\n this.update = function () {\r\n if (!this.initialized) return;\r\n if (vs && hs) {\r\n str.x = sbr.x = sr.x = this._width - bw;\r\n sbl.y = sbr.y = sb.y = this._height - bw;\r\n sf.width = st.width = sb.width = this._width - bw * 2;\r\n sf.height = sl.height = sr.height = this._height - bw * 2;\r\n }\r\n else if (hs) {\r\n sr.x = this._width - bw;\r\n sl.height = sr.height = sf.height = this._height;\r\n sf.width = this._width - bw * 2;\r\n }\r\n else { //vs\r\n sb.y = this._height - bw;\r\n st.width = sb.width = sf.width = this._width;\r\n sf.height = this._height - bw * 2;\r\n }\r\n\r\n if (this.tint !== null) {\r\n sf.tint = this.tint;\r\n if (vs && hs) stl.tint = str.tint = sbl.tint = sbr.tint = this.tint;\r\n if (hs) sl.tint = sr.tint = this.tint;\r\n if (vs) st.tint = sb.tint = this.tint;\r\n }\r\n\r\n if (this.blendMode !== null) {\r\n sf.blendMode = this.blendMode;\r\n if (vs && hs) stl.blendMode = str.blendMode = sbl.blendMode = sbr.blendMode = this.blendMode;\r\n if (hs) sl.blendMode = sr.blendMode = this.blendMode;\r\n if (vs) st.blendMode = sb.blendMode = this.blendMode;\r\n }\r\n };\r\n}\r\n\r\nSliceSprite.prototype = Object.create(UIBase.prototype);\r\nSliceSprite.prototype.constructor = SliceSprite;\r\nmodule.exports = SliceSprite;\r\n\r\n\r\n\r\n","var UIBase = require('./UIBase'),\r\n DragEvent = require('./Interaction/DragEvent'),\r\n ClickEvent = require('./Interaction/ClickEvent'),\r\n Tween = require('./Tween'),\r\n Ease = require('./Ease/Ease'),\r\n MathHelper = require('./MathHelper');\r\n\r\n/**\r\n* An UI Slider, the default width/height is 90%\r\n* \r\n* @class\r\n* @extends UIBase\r\n* @memberof PIXI.UI\r\n* @param options {Object} Slider settings\r\n* @param options.track {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} Any type of UIOBject, will be used for the slider track\r\n* @param options.handle {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as slider handle\r\n* @param [options.fill=null] {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used for slider fill\r\n* @param [options.vertical=false] {boolean} Direction of the slider\r\n* @param [options.value=0] {number} value of the slider\r\n* @param [options.minValue=0] {number} minimum value\r\n* @param [options.maxValue=100] {number} max value\r\n* @param [options.decimals=0] {boolean} the decimal precision (use negative to round tens and hundreds)\r\n* @param [options.onValueChange=null] {callback} Callback when the value has changed\r\n* @param [options.onValueChanging=null] {callback} Callback while the value is changing\r\n* \r\n* \r\n*/\r\nfunction Slider(options) {\r\n UIBase.call(this);\r\n this._amt = 0;\r\n this._disabled = false;\r\n\r\n //set options\r\n this.track = options.track;\r\n this.handle = options.handle;\r\n this.fill = options.fill || null;\r\n this._minValue = options.minValue || 0;\r\n this._maxValue = options.maxValue || 100;\r\n this.decimals = options.decimals || 0;\r\n this.vertical = options.vertical || false;\r\n this._onValueChange = options.onValueChange || null;\r\n this._onValueChanging = options.onValueChanging || null;\r\n this.value = options.value || 50;\r\n this.handle.pivot = 0.5;\r\n\r\n\r\n\r\n this.addChild(this.track);\r\n if (this.fill) this.track.addChild(this.fill);\r\n this.addChild(this.handle);\r\n this.handle.container.buttonMode = true;\r\n\r\n if (this.vertical) {\r\n this.height = \"100%\";\r\n this.width = this.track.width;\r\n this.track.height = \"100%\";\r\n this.handle.horizontalAlign = \"center\";\r\n if (this.fill) this.fill.horizontalAlign = \"center\";\r\n }\r\n else {\r\n this.width = \"100%\";\r\n this.height = this.track.height;\r\n this.track.width = \"100%\";\r\n this.handle.verticalAlign = \"middle\";\r\n if (this.fill) this.fill.verticalAlign = \"middle\";\r\n }\r\n\r\n}\r\n\r\nSlider.prototype = Object.create(UIBase.prototype);\r\nSlider.prototype.constructor = Slider;\r\nmodule.exports = Slider;\r\n\r\nSlider.prototype.update = function (soft) {\r\n var handleSize, val;\r\n\r\n if (this.vertical) {\r\n handleSize = this.handle._height || this.handle.container.height;\r\n val = ((this._height - handleSize) * this._amt) + (handleSize * 0.5);\r\n if (soft) {\r\n Tween.to(this.handle, 0.3, { top: val }, Ease.Power2.easeOut);\r\n if (this.fill) Tween.to(this.fill, 0.3, { height: val }, Ease.Power2.easeOut);\r\n }\r\n else {\r\n Tween.set(this.handle, { top: val });\r\n if (this.fill) Tween.set(this.fill, { height: val });\r\n }\r\n }\r\n else {\r\n handleSize = this.handle._width || this.handle.container.width;\r\n val = ((this._width - handleSize) * this._amt) + (handleSize * 0.5);\r\n if (soft) {\r\n Tween.to(this.handle, 0.3, { left: val }, Ease.Power2.easeOut);\r\n if (this.fill) Tween.to(this.fill, 0.3, { width: val }, Ease.Power2.easeOut);\r\n }\r\n else {\r\n Tween.set(this.handle, { left: val });\r\n if (this.fill) Tween.set(this.fill, { width: val });\r\n }\r\n }\r\n};\r\n\r\nSlider.prototype.initialize = function () {\r\n UIBase.prototype.initialize.call(this);\r\n\r\n\r\n\r\n var self = this;\r\n var startValue = 0;\r\n\r\n\r\n\r\n ////Handle dragging\r\n var handleDrag = new DragEvent(this.handle);\r\n handleDrag.onPress = function (event, isPressed) {\r\n event.stopPropagation();\r\n };\r\n\r\n handleDrag.onDragStart = function (event) {\r\n startValue = self._amt;\r\n maxPosition = self.vertical ? self._height - self.handle._height : self._width - self.handle._width;\r\n };\r\n\r\n handleDrag.onDragMove = function (event, offset) {\r\n\r\n self._amt = !maxPosition ? 0 : Math.max(0, Math.min(1, startValue + ((self.vertical ? offset.y : offset.x) / maxPosition)));\r\n\r\n triggerValueChanging();\r\n self.update();\r\n };\r\n\r\n handleDrag.onDragEnd = function () {\r\n triggerValueChange();\r\n self.update();\r\n };\r\n\r\n //Bar pressing/dragging\r\n var localMousePosition = new PIXI.Point();\r\n var trackDrag = new DragEvent(this.track);\r\n\r\n trackDrag.onPress = function (event, isPressed) {\r\n if (isPressed)\r\n updatePositionToMouse(event.data.global, true);\r\n event.stopPropagation();\r\n };\r\n\r\n trackDrag.onDragMove = function (event) {\r\n updatePositionToMouse(event.data.global, false);\r\n };\r\n\r\n trackDrag.onDragEnd = function () {\r\n triggerValueChange();\r\n };\r\n\r\n var updatePositionToMouse = function (mousePosition, soft) {\r\n self.track.container.toLocal(mousePosition, null, localMousePosition, true);\r\n\r\n var newPos = self.vertical ? localMousePosition.y - self.handle._height * 0.5 : localMousePosition.x - self.handle._width * 0.5;\r\n var maxPos = self.vertical ? self._height - self.handle._height : self._width - self.handle._width;\r\n self._amt = !maxPos ? 0 : Math.max(0, Math.min(1, newPos / maxPos));\r\n self.update(soft);\r\n triggerValueChanging();\r\n };\r\n\r\n var triggerValueChange = function () {\r\n self.emit(\"change\", self.value);\r\n if (self._lastChange != self.value) {\r\n self._lastChange = self.value;\r\n if (typeof self.onValueChange === \"function\")\r\n self.onValueChange(self.value);\r\n }\r\n };\r\n\r\n var triggerValueChanging = function () {\r\n self.emit(\"changeing\", self.value);\r\n if (self._lastChanging != self.value) {\r\n self._lastChanging = self.value;\r\n if (typeof self._onValueChanging === \"function\")\r\n self._onValueChanging(self.value);\r\n }\r\n };\r\n};\r\n\r\n\r\nObject.defineProperties(Slider.prototype, {\r\n value: {\r\n get: function () {\r\n return MathHelper.Round(MathHelper.Lerp(this._minValue, this._maxValue, this._amt), this.decimals);\r\n },\r\n set: function (val) {\r\n this._amt = (Math.max(this._minValue, Math.min(this._maxValue, val)) - this._minValue) / (this._maxValue - this._minValue);\r\n if (typeof this.onValueChange === \"function\")\r\n self.onValueChange(this.value);\r\n if (typeof this._onValueChanging === \"function\")\r\n this._onValueChanging(this.value);\r\n this.update();\r\n }\r\n },\r\n\r\n onValueChange: {\r\n get: function () {\r\n return this._onValueChange;\r\n },\r\n set: function (val) {\r\n this._onValueChange = val;\r\n }\r\n },\r\n onValueChanging: {\r\n get: function () {\r\n return this._onValueChanging;\r\n },\r\n set: function (val) {\r\n this._onValueChanging = val;\r\n }\r\n },\r\n minValue: {\r\n get: function () {\r\n return this._minValue;\r\n },\r\n set: function (val) {\r\n this._minValue = val;\r\n this.update();\r\n }\r\n },\r\n maxValue: {\r\n get: function () {\r\n return this._maxValue;\r\n },\r\n set: function (val) {\r\n this._maxValue = val;\r\n this.update();\r\n }\r\n },\r\n disabled: {\r\n get: function () {\r\n return this._disabled;\r\n },\r\n set: function (val) {\r\n if (val !== this._disabled) {\r\n this._disabled = val;\r\n this.handle.container.buttonMode = !val;\r\n this.handle.container.interactive = !val;\r\n this.track.container.interactive = !val;\r\n }\r\n }\r\n }\r\n});","var Container = require('./Container');\r\nvar Tween = require('./Tween');\r\n/**\r\n * An UI Container object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param desc {Boolean} Sort the list descending\r\n * @param tweenTime {Number} if above 0 the sort will be animated\r\n * @param tweenEase {PIXI.UI.Ease} ease method used for animation\r\n */\r\nfunction SortableList(desc, tweenTime, tweenEase) {\r\n Container.call(this);\r\n this.desc = typeof desc !== \"undefined\" ? desc : false;\r\n this.tweenTime = tweenTime || 0;\r\n this.tweenEase = tweenEase;\r\n this.items = [];\r\n\r\n}\r\n\r\nSortableList.prototype = Object.create(Container.prototype);\r\nSortableList.prototype.constructor = SortableList;\r\nmodule.exports = SortableList;\r\n\r\nSortableList.prototype.addChild = function (UIObject, fnValue, fnThenBy) {\r\n Container.prototype.addChild.call(this, UIObject);\r\n if (this.items.indexOf(UIObject) == -1) {\r\n this.items.push(UIObject);\r\n }\r\n\r\n if (typeof fnValue === \"function\")\r\n UIObject._sortListValue = fnValue;\r\n\r\n if (typeof fnThenBy === \"function\")\r\n UIObject._sortListThenByValue = fnThenBy;\r\n\r\n if (!UIObject._sortListRnd)\r\n UIObject._sortListRnd = Math.random();\r\n\r\n\r\n\r\n this.sort();\r\n};\r\n\r\nSortableList.prototype.removeChild = function (UIObject) {\r\n if (arguments.length > 1) {\r\n for (var i = 0; i < arguments.length; i++) {\r\n this.removeChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n Container.prototype.removeChild.call(this, UIObject);\r\n var index = this.items.indexOf(UIObject);\r\n if (index != -1) {\r\n this.items.splice(index, 1);\r\n }\r\n this.sort();\r\n }\r\n};\r\n\r\nSortableList.prototype.sort = function (instant) {\r\n clearTimeout(this._sortTimeout);\r\n\r\n if (instant) {\r\n this._sort();\r\n return;\r\n }\r\n\r\n var _this = this;\r\n this._sortTimeout = setTimeout(function () { _this._sort(); }, 0);\r\n};\r\n\r\nSortableList.prototype._sort = function () {\r\n var self = this,\r\n desc = this.desc,\r\n y = 0,\r\n alt = true;\r\n\r\n this.items.sort(function (a, b) {\r\n var res = a._sortListValue() < b._sortListValue() ? desc ? 1 : -1 :\r\n a._sortListValue() > b._sortListValue() ? desc ? -1 : 1 : 0;\r\n\r\n if (res === 0 && a._sortListThenByValue && b._sortListThenByValue) {\r\n res = a._sortListThenByValue() < b._sortListThenByValue() ? desc ? 1 : -1 :\r\n a._sortListThenByValue() > b._sortListThenByValue() ? desc ? -1 : 1 : 0;\r\n }\r\n if (res === 0) {\r\n res = a._sortListRnd > b._sortListRnd ? 1 :\r\n a._sortListRnd < b._sortListRnd ? -1 : 0;\r\n }\r\n return res;\r\n });\r\n\r\n for (var i = 0; i < this.items.length; i++) {\r\n var item = this.items[i];\r\n\r\n alt = !alt;\r\n\r\n if (this.tweenTime > 0) {\r\n Tween.fromTo(item, this.tweenTime, { x: item.x, y: item.y }, { x: 0, y: y }, this.tweenEase);\r\n }\r\n else {\r\n item.x = 0;\r\n item.y = y;\r\n }\r\n y += item.height;\r\n if (typeof item.altering === \"function\")\r\n item.altering(alt);\r\n }\r\n\r\n //force it to update parents when sort animation is done (prevent scrolling container bug)\r\n if (this.tweenTime > 0) {\r\n setTimeout(function () {\r\n self.updatesettings(false, true);\r\n }, this.tweenTime * 1000);\r\n }\r\n};\r\n\r\n\r\n","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * An UI sprite object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param Texture {PIXI.Texture} The texture for the sprite\r\n */\r\nfunction Sprite(t) {\r\n this.sprite = new PIXI.Sprite(t);\r\n UIBase.call(this, this.sprite.width, this.sprite.height);\r\n this.container.addChild(this.sprite);\r\n}\r\n\r\nSprite.prototype = Object.create(UIBase.prototype);\r\nSprite.prototype.constructor = Sprite;\r\nmodule.exports = Sprite;\r\n\r\n\r\nSprite.fromFrame = function (frameId) {\r\n return new Sprite(new PIXI.Texture.fromFrame(frameId));\r\n};\r\n\r\nSprite.fromImage = function (imageUrl) {\r\n return new Sprite(new PIXI.Texture.fromImage(imageUrl));\r\n};\r\n\r\n/**\r\n * Updates the text\r\n *\r\n * @private\r\n */\r\nSprite.prototype.update = function () {\r\n if (this.tint !== null)\r\n this.sprite.tint = this.tint;\r\n\r\n if (this.blendMode !== null)\r\n this.sprite.blendMode = this.blendMode;\r\n\r\n this.sprite.width = this._width;\r\n this.sprite.height = this._height;\r\n};\r\n\r\n","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * A Stage for UIObjects\r\n *\r\n * @class\r\n * @extends PIXI.UI.Container\r\n * @memberof PIXI.UI\r\n * @param width {Number} Width of the Stage\r\n * @param height {Number} Height of the Stage\r\n */\r\nfunction Stage(width, height) {\r\n PIXI.Container.call(this);\r\n this.__width = width;\r\n this.__height = height;\r\n this.minWidth = 0;\r\n this.minHeight = 0;\r\n\r\n this.UIChildren = [];\r\n this.stage = this;\r\n this.interactive = true;\r\n this.hitArea = new PIXI.Rectangle(0, 0, 0, 0);\r\n this.initialized = true;\r\n}\r\n\r\nStage.prototype = Object.create(PIXI.Container.prototype);\r\nStage.prototype.constructor = Stage;\r\nmodule.exports = Stage;\r\n\r\nStage.prototype.addChild = function (UIObject) {\r\n var argumentLenght = arguments.length;\r\n if (argumentLenght > 1) {\r\n for (var i = 0; i < argumentLenght; i++) {\r\n this.addChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n if (UIObject.parent !== null)\r\n UIObject.parent.removeChild(UIObject);\r\n\r\n UIObject.parent = this;\r\n this.UIChildren.push(UIObject);\r\n PIXI.Container.prototype.addChild.call(this, UIObject.container);\r\n UIObject.updatesettings(true);\r\n }\r\n};\r\n\r\nStage.prototype.removeChild = function (UIObject) {\r\n var argumentLenght = arguments.length;\r\n if (argumentLenght > 1) {\r\n for (var i = 0; i < argumentLenght; i++) {\r\n this.removeChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n PIXI.Container.prototype.removeChild.call(this, UIObject.container);\r\n var index = this.UIChildren.indexOf(UIObject);\r\n if (index != -1) {\r\n this.UIChildren.splice(index, 1);\r\n UIObject.parent = null;\r\n }\r\n\r\n }\r\n};\r\n\r\nStage.prototype.resize = function (width, height) {\r\n if (!isNaN(height)) this.__height = height;\r\n if (!isNaN(width)) this.__width = width;\r\n\r\n if (this.minWidth || this.minHeight) {\r\n var rx = 1,\r\n ry = 1;\r\n\r\n if (width && width < this.minWidth) {\r\n rx = this.minWidth / width;\r\n }\r\n\r\n if (height && height < this.minHeight) {\r\n ry = this.minHeight / height;\r\n }\r\n\r\n if (rx > ry && rx > 1) {\r\n this.scale.set(1 / rx);\r\n this.__height *= rx;\r\n this.__width *= rx;\r\n }\r\n else if (ry > 1) {\r\n this.scale.set(1 / ry);\r\n this.__width *= ry;\r\n this.__height *= ry;\r\n }\r\n else if (this.scale.x !== 1) {\r\n this.scale.set(1);\r\n }\r\n }\r\n\r\n this.hitArea.width = this.__width;\r\n this.hitArea.height = this.__height;\r\n\r\n for (var i = 0; i < this.UIChildren.length; i++)\r\n this.UIChildren[i].updatesettings(true, false);\r\n};\r\n\r\nObject.defineProperties(Stage.prototype, {\r\n _width: {\r\n get: function () {\r\n return this.__width;\r\n },\r\n set: function (val) {\r\n if (!isNaN(val)) {\r\n this.__width = val;\r\n this.resize();\r\n }\r\n }\r\n },\r\n _height: {\r\n get: function () {\r\n return this.__height;\r\n },\r\n set: function (val) {\r\n if (!isNaN(val)) {\r\n this.__height = val;\r\n this.resize();\r\n }\r\n }\r\n }\r\n});","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * An UI text object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param Text {String} Text content\r\n * @param TextStyle {PIXI.TextStyle} Style used for the Text\r\n */\r\nfunction Text(text, PIXITextStyle) {\r\n this._text = new PIXI.Text(text, PIXITextStyle);\r\n UIBase.call(this, this._text.width, this._text.height);\r\n this.container.addChild(this._text);\r\n\r\n this.baseupdate = function () {\r\n //force original text width unless using anchors\r\n if (this._anchorLeft === null || this._anchorRight === null) {\r\n this.setting.width = this._text.width;\r\n this.setting.widthPct = null;\r\n }\r\n else {\r\n this._text.width = this._width;\r\n }\r\n\r\n //force original text height unless using anchors\r\n if (this._anchorTop === null || this._anchorBottom === null) {\r\n this.setting.height = this._text.height;\r\n this.setting.heightPct = null;\r\n }\r\n else {\r\n this._text.width = this._width;\r\n }\r\n\r\n\r\n UIBase.prototype.baseupdate.call(this);\r\n };\r\n\r\n this.update = function () {\r\n //set tint\r\n if (this.tint !== null)\r\n this._text.tint = this.tint;\r\n\r\n //set blendmode\r\n if (this.blendMode !== null)\r\n this._text.blendMode = this.blendMode;\r\n };\r\n}\r\n\r\nText.prototype = Object.create(UIBase.prototype);\r\nText.prototype.constructor = Text;\r\nmodule.exports = Text;\r\n\r\n\r\nObject.defineProperties(Text.prototype, {\r\n value: {\r\n get: function () {\r\n return this._text.text;\r\n },\r\n set: function (val) {\r\n this._text.text = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n text: {\r\n get: function () {\r\n return this.value;\r\n },\r\n set: function (val) {\r\n this.value = val;\r\n }\r\n }\r\n});","var InputBase = require('./InputBase'),\r\n Container = require('./Container'),\r\n DragEvent = require('./Interaction/DragEvent');\r\n\r\n/**\r\n * An UI text object\r\n *\r\n * @class\r\n * @extends PIXI.UI.InputBase\r\n * @memberof PIXI.UI\r\n * @param options.value {String} Text content\r\n * @param [options.multiLine=false] {Boolean} Multiline input\r\n * @param options.style {PIXI.TextStyle} Style used for the Text\r\n * @param options.background {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for input\r\n * @param [options.selectedColor='#ffffff'] {String|Array} Fill color of selected text\r\n * @param [options.selectedBackgroundColor='#318cfa'] {String} BackgroundColor of selected text\r\n * @param [options.width=150] {Number} width of input\r\n * @param [options.height=20] {Number} height of input\r\n * @param [options.padding=3] {Number} input padding\r\n * @param [options.paddingTop=0] {Number} input padding\r\n * @param [options.paddingBottom=0] {Number} input padding\r\n * @param [options.paddingLeft=0] {Number} input padding\r\n * @param [options.paddingRight=0] {Number} input padding\r\n * @param [options.tabIndex=0] {Number} input tab index\r\n * @param [options.tabGroup=0] {Number|String} input tab group\r\n * @param [options.maxLength=0] {Number} 0 = unlimited\r\n * @param [options.caretWidth=1] {Number} width of the caret\r\n * @param [options.lineHeight=0] {Number} 0 = inherit from text\r\n */\r\nfunction TextInput(options) {\r\n //create temp input (for mobile keyboard)\r\n if (typeof _pui_tempInput === \"undefined\") {\r\n _pui_tempInput = document.createElement(\"INPUT\");\r\n _pui_tempInput.setAttribute(\"type\", \"text\");\r\n _pui_tempInput.setAttribute(\"id\", \"_pui_tempInput\");\r\n _pui_tempInput.setAttribute(\"style\", \"position:fixed; left:-10px; top:-10px; width:0px; height: 0px;\");\r\n document.body.appendChild(_pui_tempInput);\r\n }\r\n\r\n\r\n InputBase.call(this, options.width || options.background ? options.background.width : 150, options.height || options.background ? options.background.height : 20, options.tabIndex || 0, options.tabGroup || 0);\r\n this._dirtyText = true;\r\n this.maxLength = options.maxLength || 0;\r\n this._value = this._lastValue = options.value || \"\";\r\n\r\n if (this.maxLength) this._value = this._value.slice(0, this.maxLength);\r\n\r\n var self = this;\r\n var chars = [];\r\n var multiLine = options.multiLine !== undefined ? options.multiLine : false;\r\n var color = options.style && options.style.fill ? options.style.fill : \"#000000\";\r\n var selectedColor = options.selectedColor || \"#ffffff\";\r\n var selectedBackgroundColor = options.selectedBackgroundColor || \"#318cfa\";\r\n var tempText = new PIXI.Text(\"1\", options.style);\r\n var textHeight = tempText.height;\r\n var lineHeight = options.lineHeight || textHeight || self._height;\r\n tempText.destroy();\r\n\r\n\r\n //set cursor\r\n //this.container.cursor = \"text\";\r\n\r\n //selection graphics\r\n var selection = self.selection = new PIXI.Graphics();\r\n selection.visible = false;\r\n selection._startIndex = 0;\r\n selection._endIndex = 0;\r\n\r\n //caret graphics\r\n var caret = self.caret = new PIXI.Graphics();\r\n caret.visible = false;\r\n caret._index = 0;\r\n caret.lineStyle(options.caretWidth || 1, \"#ffffff\", 1);\r\n caret.moveTo(0, 0);\r\n caret.lineTo(0, textHeight);\r\n\r\n\r\n //insert bg\r\n if (options.background) {\r\n this.background = options.background;\r\n this.background.width = \"100%\";\r\n this.background.height = \"100%\";\r\n this.addChild(this.background);\r\n }\r\n\r\n //var padding\r\n var paddingLeft = options.paddingLeft !== undefined ? options.paddingLeft : options.padding !== undefined ? options.padding : 3;\r\n var paddingRight = options.paddingRight !== undefined ? options.paddingRight : options.padding !== undefined ? options.padding : 3;\r\n var paddingBottom = options.paddingBottom !== undefined ? options.paddingBottom : options.padding !== undefined ? options.padding : 3;\r\n var paddingTop = options.paddingTop !== undefined ? options.paddingTop : options.padding !== undefined ? options.padding : 3;\r\n\r\n //insert text container (scrolling container)\r\n var textContainer = this.textContainer = new PIXI.UI.ScrollingContainer({\r\n scrollX: !multiLine,\r\n scrollY: multiLine,\r\n dragScrolling: multiLine,\r\n expandMask: 2,\r\n softness: 0.2,\r\n overflowX: 40,\r\n overflowY: 40\r\n });\r\n textContainer.anchorTop = paddingTop;\r\n textContainer.anchorBottom = paddingBottom;\r\n textContainer.anchorLeft = paddingLeft;\r\n textContainer.anchorRight = paddingRight;\r\n this.addChild(textContainer);\r\n\r\n if (multiLine) {\r\n this._useNext = this._usePrev = false;\r\n textContainer.dragRestrictAxis = \"y\";\r\n textContainer.dragThreshold = 5;\r\n this.dragRestrictAxis = \"x\";\r\n this.dragThreshold = 5;\r\n\r\n }\r\n\r\n\r\n var innerContainer = textContainer.innerContainer;\r\n innerContainer.cacheAsBitmap = true;\r\n //textContainer.container.addChild(innerContainer);\r\n\r\n\r\n this.update = function () {\r\n if (this._width != this._lastWidth) {\r\n this._lastWidth = this._width;\r\n if (multiLine) {\r\n updateText();\r\n if (caret.visible) self.setCaretIndex(caret._index);\r\n if (hasSelection) updateSelectionGraphics();\r\n }\r\n\r\n }\r\n\r\n //update text \r\n if (this._dirtyText) {\r\n updateText();\r\n this._dirtyText = false;\r\n }\r\n };\r\n\r\n //selection Vars\r\n var caretInterval, //interval for flash\r\n si, //startIndex\r\n sie, //startIndexEnd\r\n ei, //endIndex\r\n eie, //endIndexEnd\r\n sp = new PIXI.Point(), //startposition\r\n ds = new PIXI.Point(), //dragStart\r\n de = new PIXI.Point(), //dragend\r\n rdd = false, //Reverse drag direction\r\n vrdd = false, //vertical Reverse drag direction\r\n selectionStart = -1,\r\n selectionEnd = -1,\r\n hasSelection = false,\r\n t = performance.now(), //timestamp\r\n cc = 0, //click counter\r\n textLengthPX = 0,\r\n textHeightPX = 0,\r\n lineIndexMax = 0,\r\n ctrlDown = false,\r\n shiftDown = false,\r\n shiftKey = 16,\r\n ctrlKey = 17,\r\n cmdKey = 91;\r\n\r\n\r\n\r\n var updateText = function () {\r\n textLengthPX = 0;\r\n textHeightPX = 0;\r\n lineIndexMax = 0;\r\n\r\n var lineIndex = 0,\r\n length = self._value.length,\r\n x = 0,\r\n y = (lineHeight - textHeight) * 0.5,\r\n i = 0;\r\n\r\n //destroy excess chars\r\n if (chars.length > length) {\r\n for (i = chars.length - 1; i >= length; i--) {\r\n innerContainer.removeChild(chars[i]);\r\n chars[i].destroy();\r\n }\r\n chars.splice(length, chars.length - length);\r\n }\r\n\r\n //update and add chars\r\n var whitespace = false;\r\n var newline = false;\r\n var wordIndex = 0;\r\n var lastWordIndex = -1;\r\n var wrap = false;\r\n for (i = 0; i < self._value.length; i++) {\r\n if (whitespace || newline) {\r\n lastWordIndex = i;\r\n wordIndex++;\r\n }\r\n\r\n var c = self._value[i];\r\n whitespace = c === \" \";\r\n newline = c === \"\\n\";\r\n\r\n\r\n if (newline) { //newline \"hack\". webgl render errors if \\n is passed to text\r\n c = \"\";\r\n }\r\n\r\n\r\n\r\n var charText = chars[i];\r\n if (!charText) {\r\n charText = new PIXI.Text(c, options.style);\r\n innerContainer.addChild(charText);\r\n chars.push(charText);\r\n }\r\n else {\r\n charText.text = c;\r\n }\r\n\r\n charText.scale.x = newline ? 0 : 1;\r\n charText.wrapped = wrap;\r\n wrap = false;\r\n\r\n if (newline || (multiLine && x + charText.width >= self._width - paddingLeft - paddingRight)) {\r\n lineIndex++;\r\n x = 0;\r\n y += lineHeight;\r\n\r\n if (lastWordIndex != -1 && !newline) {\r\n i = lastWordIndex - 1;\r\n lastWordIndex = -1;\r\n wrap = true;\r\n continue;\r\n }\r\n }\r\n\r\n\r\n charText.lineIndex = lineIndex;\r\n charText.x = x;\r\n charText.y = y;\r\n charText.wordIndex = whitespace || newline ? -1 : wordIndex;\r\n x += charText.width;\r\n\r\n\r\n if (x > textLengthPX)\r\n textLengthPX = x;\r\n if (y > textHeightPX)\r\n textHeightPX = y;\r\n }\r\n\r\n lineIndexMax = lineIndex;\r\n\r\n //put caret on top\r\n innerContainer.addChild(caret);\r\n\r\n //recache\r\n if (innerContainer.cacheAsBitmap) {\r\n innerContainer.cacheAsBitmap = false;\r\n innerContainer.cacheAsBitmap = true;\r\n }\r\n\r\n textContainer.update();\r\n\r\n };\r\n\r\n var updateClosestIndex = function (point, start) {\r\n var currentDistX = 99999;\r\n var currentClosest;\r\n var currentIndex = -1;\r\n var atEnd = false;\r\n\r\n var closestLineIndex = 0;\r\n if (lineIndexMax > 0)\r\n closestLineIndex = Math.max(0, Math.min(lineIndexMax, Math.floor(point.y / lineHeight)));\r\n\r\n\r\n\r\n\r\n\r\n for (var i = 0; i < chars.length; i++) {\r\n var char = chars[i];\r\n if (char.lineIndex != closestLineIndex) continue;\r\n\r\n var distX = Math.abs(point.x - (char.x + (char.width * 0.5)));\r\n if (distX < currentDistX) {\r\n currentDistX = distX;\r\n currentClosest = char;\r\n currentIndex = i;\r\n atEnd = point.x > char.x + (char.width * 0.5);\r\n }\r\n }\r\n\r\n\r\n if (start) {\r\n si = currentIndex;\r\n sie = atEnd;\r\n }\r\n else {\r\n ei = currentIndex;\r\n eie = atEnd;\r\n }\r\n };\r\n\r\n var deleteSelection = function () {\r\n if (hasSelection) {\r\n self.value = self.value.slice(0, selectionStart) + self.value.slice(selectionEnd + 1);\r\n self.setCaretIndex(selectionStart);\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n var updateSelectionColors = function () {\r\n //Color charecters\r\n for (var i = 0; i < chars.length; i++) {\r\n if (i >= selectionStart && i <= selectionEnd)\r\n chars[i].style.fill = selectedColor;\r\n else\r\n chars[i].style.fill = color;\r\n }\r\n };\r\n\r\n var _sp = new PIXI.Point();\r\n var scrollToPosition = function (pos) {\r\n _sp.copy(pos);\r\n if (multiLine && _sp.y >= lineHeight)\r\n _sp.y += lineHeight;\r\n textContainer.focusPosition(_sp);\r\n };\r\n\r\n var resetScrollPosition = function () {\r\n _sp.set(0, 0);\r\n textContainer.focusPosition(_sp);\r\n };\r\n\r\n //caret\r\n var hideCaret = function () {\r\n caret.visible = false;\r\n clearInterval(caretInterval);\r\n };\r\n\r\n var showCaret = function () {\r\n self.clearSelection();\r\n clearInterval(caretInterval);\r\n caret.alpha = 1;\r\n caret.visible = true;\r\n caretInterval = setInterval(function () {\r\n caret.alpha = caret.alpha === 0 ? 1 : 0;\r\n }, 500);\r\n\r\n };\r\n\r\n var insertTextAtCaret = function (c) {\r\n if (hasSelection)\r\n deleteSelection();\r\n if (!self.maxLength || chars.length < self.maxLength) {\r\n\r\n if (caret._atEnd) {\r\n self.value += c;\r\n self.setCaretIndex(chars.length);\r\n }\r\n else {\r\n var index = Math.min(chars.length - 1, caret._index);\r\n self.value = self.value.slice(0, index) + c + self.value.slice(index);\r\n self.setCaretIndex(index + c.length);\r\n }\r\n }\r\n };\r\n\r\n //events\r\n var keyDownEvent = function (e) {\r\n if (e.which === ctrlKey || e.which === cmdKey) ctrlDown = true;\r\n if (e.which === shiftKey) shiftDown = true;\r\n\r\n if (e.which === 13) { //enter\r\n insertTextAtCaret('\\n');\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n if (ctrlDown) {\r\n\r\n //ctrl + ?\r\n if (e.which === 65) { //ctrl + a\r\n self.select();\r\n e.preventDefault();\r\n return;\r\n }\r\n else if (e.which === 90) { //ctrl + z (undo)\r\n if (self.value != self._lastValue)\r\n self.value = self._lastValue;\r\n self.setCaretIndex(self._lastValue.length + 1);\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n }\r\n if (e.which === 8) {\r\n //backspace\r\n if (!deleteSelection()) {\r\n if (caret._index > 0 || (chars.length === 1 && caret._atEnd)) {\r\n if (caret._atEnd) {\r\n self.value = self.value.slice(0, chars.length - 1);\r\n self.setCaretIndex(caret._index);\r\n }\r\n else {\r\n self.value = self.value.slice(0, caret._index - 1) + self.value.slice(caret._index);\r\n self.setCaretIndex(caret._index - 1);\r\n }\r\n }\r\n }\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n if (e.which === 46) {\r\n //delete\r\n if (!deleteSelection()) {\r\n if (!caret._atEnd) {\r\n self.value = self.value.slice(0, caret._index) + self.value.slice(caret._index + 1);\r\n self.setCaretIndex(caret._index);\r\n }\r\n }\r\n e.preventDefault();\r\n return;\r\n }\r\n else if (e.which === 37 || e.which === 39) {\r\n rdd = e.which === 37;\r\n if (shiftDown) {\r\n if (hasSelection) {\r\n var caretAtStart = selectionStart === caret._index;\r\n if (caretAtStart) {\r\n if (selectionStart === selectionEnd && rdd === caret._forward) {\r\n self.setCaretIndex(caret._forward ? caret._index : caret._index + 1);\r\n }\r\n else {\r\n var startindex = rdd ? caret._index - 1 : caret._index + 1;\r\n self.selectRange(startindex, selectionEnd);\r\n caret._index = Math.min(chars.length - 1, Math.max(0, startindex));\r\n }\r\n }\r\n else {\r\n var endIndex = rdd ? caret._index - 1 : caret._index + 1;\r\n self.selectRange(selectionStart, endIndex);\r\n caret._index = Math.min(chars.length - 1, Math.max(0, endIndex));\r\n }\r\n }\r\n else {\r\n var _i = caret._atEnd ? caret._index + 1 : caret._index;\r\n var selectIndex = rdd ? _i - 1 : _i;\r\n self.selectRange(selectIndex, selectIndex);\r\n caret._index = selectIndex;\r\n caret._forward = !rdd;\r\n }\r\n }\r\n else {\r\n //Navigation\r\n if (hasSelection)\r\n self.setCaretIndex(rdd ? selectionStart : selectionEnd + 1);\r\n else\r\n self.setCaretIndex(caret._index + (rdd ? caret._atEnd ? 0 : -1 : 1));\r\n }\r\n e.preventDefault();\r\n return;\r\n\r\n }\r\n else if (multiLine && (e.which === 38 || e.which === 40)) {\r\n vrdd = e.which === 38;\r\n if (shiftDown) {\r\n if (hasSelection) {\r\n de.y = Math.max(0, Math.min(textHeightPX, de.y + (vrdd ? -lineHeight : lineHeight)));\r\n updateClosestIndex(de, false);\r\n console.log(si, ei);\r\n if (Math.abs(si - ei) <= 1) {\r\n console.log(si, ei);\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n } else {\r\n caret._index = (eie ? ei + 1 : ei) + (caret._down ? -1 : 0);\r\n self.selectRange(caret._down ? si : si - 1, caret._index);\r\n }\r\n\r\n }\r\n else {\r\n si = caret._index;\r\n sie = false;\r\n de.copy(caret);\r\n de.y = Math.max(0, Math.min(textHeightPX, de.y + (vrdd ? -lineHeight : lineHeight)));\r\n updateClosestIndex(de, false);\r\n caret._index = (eie ? ei + 1 : ei) - (vrdd ? 0 : 1);\r\n self.selectRange(vrdd ? si - 1 : si, caret._index);\r\n caret._down = !vrdd;\r\n }\r\n }\r\n else {\r\n if (hasSelection) {\r\n self.setCaretIndex(vrdd ? selectionStart : selectionEnd + 1);\r\n }\r\n else {\r\n ds.copy(caret);\r\n ds.y += vrdd ? -lineHeight : lineHeight;\r\n ds.x += 1;\r\n updateClosestIndex(ds, true);\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n }\r\n }\r\n e.preventDefault();\r\n return;\r\n }\r\n };\r\n\r\n var keyUpEvent = function (e) {\r\n if (e.which == ctrlKey || e.which == cmdKey) ctrlDown = false;\r\n if (e.which === shiftKey) shiftDown = false;\r\n };\r\n\r\n var copyEvent = function (e) {\r\n if (hasSelection) {\r\n var clipboardData = e.clipboardData || window.clipboardData;\r\n clipboardData.setData('Text', self.value.slice(selectionStart, selectionEnd + 1));\r\n }\r\n e.preventDefault();\r\n };\r\n\r\n var cutEvent = function (e) {\r\n if (hasSelection) {\r\n copyEvent(e);\r\n deleteSelection();\r\n }\r\n e.preventDefault();\r\n };\r\n\r\n var pasteEvent = function (e) {\r\n var clipboardData = e.clipboardData || window.clipboardData;\r\n insertTextAtCaret(clipboardData.getData('Text'));\r\n e.preventDefault();\r\n };\r\n\r\n var inputEvent = function (e) {\r\n insertTextAtCaret(e.data);\r\n e.preventDefault();\r\n };\r\n\r\n var inputBlurEvent = function (e) {\r\n self.blur();\r\n };\r\n\r\n var event = new DragEvent(this);\r\n\r\n event.onPress = function (e, mouseDown) {\r\n\r\n if (mouseDown) {\r\n var timeSinceLast = performance.now() - t;\r\n t = performance.now();\r\n if (timeSinceLast < 250) {\r\n cc++;\r\n if (cc > 1)\r\n this.select();\r\n else {\r\n innerContainer.toLocal(sp, undefined, ds, true);\r\n updateClosestIndex(ds, true);\r\n var c = chars[si];\r\n if (c) {\r\n if (c.wordIndex != -1)\r\n this.selectWord(c.wordIndex);\r\n else\r\n this.selectRange(si, si);\r\n }\r\n }\r\n }\r\n else {\r\n cc = 0;\r\n sp.copy(e.data.global);\r\n innerContainer.toLocal(sp, undefined, ds, true);\r\n if (chars.length) {\r\n updateClosestIndex(ds, true);\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n }\r\n }\r\n }\r\n e.data.originalEvent.preventDefault();\r\n };\r\n\r\n event.onDragMove = function (e, offset) {\r\n if (!chars.length || !this._focused) return;\r\n\r\n de.x = sp.x + offset.x;\r\n de.y = sp.y + offset.y;\r\n innerContainer.toLocal(de, undefined, de, true);\r\n updateClosestIndex(de, false);\r\n\r\n if (si < ei) {\r\n self.selectRange(sie ? si + 1 : si, eie ? ei : ei - 1);\r\n caret._index = eie ? ei : ei - 1;\r\n }\r\n else if (si > ei) {\r\n self.selectRange(ei, sie ? si : si - 1);\r\n caret._index = ei;\r\n }\r\n else {\r\n if (sie === eie) {\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n }\r\n else {\r\n self.selectRange(si, ei);\r\n caret._index = ei;\r\n }\r\n }\r\n\r\n caret._forward = si <= ei;\r\n caret._down = offset.y > 0;\r\n\r\n scrollToPosition(de);\r\n };\r\n\r\n\r\n\r\n\r\n //public methods\r\n this.focus = function () {\r\n if (!this._focused) {\r\n InputBase.prototype.focus.call(this);\r\n\r\n var l = this.container.worldTransform.tx + \"px\";\r\n var t = this.container.worldTransform.ty + \"px\";\r\n var h = this.container.height + \"px\";\r\n var w = this.container.width + \"px\";\r\n\r\n _pui_tempInput.setAttribute(\"style\", \"position:fixed; left:\" + l + \"; top:\" + t + \"; height:\" + h + \"; width:\" + w + \";\");\r\n _pui_tempInput.value = \"\";\r\n _pui_tempInput.focus();\r\n _pui_tempInput.setAttribute(\"style\", \"position:fixed; left:-10px; top:-10px; width:0px; height: 0px;\");\r\n\r\n innerContainer.cacheAsBitmap = false;\r\n _pui_tempInput.addEventListener(\"blur\", inputBlurEvent, false);\r\n document.addEventListener(\"keydown\", keyDownEvent, false);\r\n document.addEventListener(\"keyup\", keyUpEvent, false);\r\n document.addEventListener('paste', pasteEvent, false);\r\n document.addEventListener('copy', copyEvent, false);\r\n document.addEventListener('cut', cutEvent, false);\r\n _pui_tempInput.addEventListener('textInput', inputEvent, false);\r\n\r\n setTimeout(function () {\r\n if (!caret.visible && !self.selection.visible && !multiLine)\r\n self.setCaretIndex(chars.length);\r\n }, 0);\r\n\r\n }\r\n\r\n };\r\n\r\n this.blur = function () {\r\n if (this._focused) {\r\n InputBase.prototype.blur.call(this);\r\n ctrlDown = false;\r\n shiftDown = false;\r\n hideCaret();\r\n this.clearSelection();\r\n if (chars.length > 1) innerContainer.cacheAsBitmap = true;\r\n _pui_tempInput.removeEventListener(\"blur\", inputBlurEvent);\r\n document.removeEventListener(\"keydown\", keyDownEvent);\r\n document.removeEventListener(\"keyup\", keyUpEvent);\r\n document.removeEventListener('paste', pasteEvent);\r\n document.removeEventListener('copy', copyEvent);\r\n document.removeEventListener('cut', cutEvent);\r\n _pui_tempInput.removeEventListener('textInput', inputEvent);\r\n _pui_tempInput.blur();\r\n\r\n }\r\n\r\n if (!multiLine)\r\n resetScrollPosition();\r\n };\r\n\r\n this.setCaretIndex = function (index) {\r\n caret._atEnd = index >= chars.length;\r\n caret._index = Math.max(0, Math.min(chars.length - 1, index));\r\n\r\n if (chars.length && index > 0) {\r\n\r\n var i = Math.max(0, Math.min(index, chars.length - 1));\r\n var c = chars[i];\r\n\r\n if (c && c.wrapped) {\r\n caret.x = c.x;\r\n caret.y = c.y;\r\n }\r\n else {\r\n i = Math.max(0, Math.min(index - 1, chars.length - 1));\r\n c = chars[i];\r\n caret.x = chars[i].x + chars[i].width;\r\n caret.y = (chars[i].lineIndex * lineHeight) + (lineHeight - textHeight) * 0.5;\r\n }\r\n }\r\n else {\r\n caret.x = 0;\r\n caret.y = (lineHeight - textHeight) * 0.5;\r\n }\r\n\r\n scrollToPosition(caret);\r\n showCaret();\r\n\r\n };\r\n\r\n this.select = function () {\r\n this.selectRange(0, chars.length - 1);\r\n };\r\n\r\n this.selectWord = function (wordIndex) {\r\n var startIndex = chars.length;\r\n var endIndex = 0;\r\n for (var i = 0; i < chars.length; i++) {\r\n if (chars[i].wordIndex !== wordIndex) continue;\r\n if (i < startIndex)\r\n startIndex = i;\r\n if (i > endIndex)\r\n endIndex = i;\r\n }\r\n\r\n this.selectRange(startIndex, endIndex);\r\n };\r\n\r\n var drawSelectionRect = function (x, y, w, h) {\r\n self.selection.beginFill(\"0x\" + selectedBackgroundColor.slice(1), 1);\r\n self.selection.moveTo(x, y);\r\n self.selection.lineTo(x + w, y);\r\n self.selection.lineTo(x + w, y + h);\r\n self.selection.lineTo(x, y + h);\r\n self.selection.endFill();\r\n };\r\n\r\n var updateSelectionGraphics = function () {\r\n var c1 = chars[selectionStart];\r\n if (c1 !== undefined) {\r\n var cx = c1.x,\r\n cy = c1.y,\r\n w = 0,\r\n h = textHeight,\r\n cl = c1.lineIndex;\r\n\r\n self.selection.clear();\r\n for (var i = selectionStart; i <= selectionEnd; i++) {\r\n var c = chars[i];\r\n if (c.lineIndex != cl) {\r\n drawSelectionRect(cx, cy, w, h);\r\n cx = c.x;\r\n cy = c.y;\r\n cl = c.lineIndex;\r\n w = 0;\r\n }\r\n w += c.width;\r\n }\r\n drawSelectionRect(cx, cy, w, h);\r\n innerContainer.addChildAt(self.selection, 0);\r\n }\r\n };\r\n\r\n this.selectRange = function (startIndex, endIndex) {\r\n if (startIndex > -1 && endIndex > -1) {\r\n var start = Math.min(startIndex, endIndex, chars.length - 1);\r\n var end = Math.min(Math.max(startIndex, endIndex), chars.length - 1);\r\n if (start != selectionStart || end != selectionEnd) {\r\n hasSelection = true;\r\n this.selection.visible = true;\r\n selectionStart = start;\r\n selectionEnd = end;\r\n hideCaret();\r\n updateSelectionGraphics();\r\n updateSelectionColors();\r\n }\r\n this.focus();\r\n }\r\n else {\r\n self.clearSelection();\r\n }\r\n };\r\n\r\n this.clearSelection = function () {\r\n if (hasSelection) {\r\n //remove color\r\n hasSelection = false;\r\n this.selection.visible = false;\r\n selectionStart = -1;\r\n selectionEnd = -1;\r\n updateSelectionColors();\r\n }\r\n };\r\n}\r\n\r\nTextInput.prototype = Object.create(InputBase.prototype);\r\nTextInput.prototype.constructor = TextInput;\r\nmodule.exports = TextInput;\r\n\r\nObject.defineProperties(TextInput.prototype, {\r\n value: {\r\n get: function () {\r\n return this._value;\r\n },\r\n set: function (val) {\r\n if (this.maxLength)\r\n val = val.slice(0, this.maxLength);\r\n\r\n if (this._value != val) {\r\n this._lastValue = this._value;\r\n this._value = val;\r\n this._dirtyText = true;\r\n this.update();\r\n this.emit(\"change\");\r\n\r\n }\r\n }\r\n },\r\n text: {\r\n get: function () {\r\n return this.value;\r\n },\r\n set: function (val) {\r\n this.value = val;\r\n }\r\n }\r\n});\r\n\r\n\r\n/*\r\n * Features:\r\n * multiLine, shift selection, Mouse Selection, Cut, Copy, Paste, Delete, Backspace, Arrow navigation, tabIndex\r\n * \r\n * Methods:\r\n * blur()\r\n * focus()\r\n * select() - selects all text\r\n * selectRange(startIndex, endIndex)\r\n * clearSelection() \r\n * setCaretIndex(index) moves caret to index\r\n * \r\n * \r\n * Events:\r\n * \"change\"\r\n * \"blur\"\r\n * \"blur\"\r\n * \"focus\"\r\n * \"focusChanged\" param: [bool]focus\r\n * \r\n * \r\n */","var Tween = require('./Tween');\r\n\r\nfunction Ticker(autoStart) {\r\n PIXI.utils.EventEmitter.call(this);\r\n this._disabled = true;\r\n this._now = 0;\r\n\r\n this.DeltaTime = 0;\r\n this.Time = performance.now();\r\n this.Ms = 0;\r\n if (autoStart) {\r\n this.disabled = false;\r\n }\r\n Ticker.shared = this;\r\n}\r\n\r\nTicker.prototype = Object.create(PIXI.utils.EventEmitter.prototype);\r\nTicker.prototype.constructor = Ticker;\r\n\r\nmodule.exports = Ticker;\r\n\r\n\r\n\r\nObject.defineProperties(Ticker.prototype, {\r\n disabled: {\r\n get: function () {\r\n return this._disabled;\r\n },\r\n set: function (val) {\r\n if (!this._disabled) {\r\n this._disabled = true;\r\n }\r\n else {\r\n this._disabled = false;\r\n Ticker.shared = this;\r\n this.update(performance.now(), true);\r\n }\r\n }\r\n },\r\n});\r\n\r\n\r\n\r\n/**\r\n * Updates the text\r\n *\r\n * @private\r\n */\r\nTicker.prototype.update = function (time) {\r\n Ticker.shared._now = time;\r\n Ticker.shared.Ms = Ticker.shared._now - Ticker.shared.Time;\r\n Ticker.shared.Time = Ticker.shared._now;\r\n Ticker.shared.DeltaTime = Ticker.shared.Ms * 0.001;\r\n Ticker.shared.emit(\"update\", Ticker.shared.DeltaTime);\r\n Tween._update(Ticker.shared.DeltaTime);\r\n if (!Ticker.shared._disabled)\r\n requestAnimationFrame(Ticker.shared.update);\r\n};\r\n\r\n\r\n\r\n\r\nTicker.on = function (event, fn, context) {\r\n Ticker.prototype.on.apply(this.shared, arguments);\r\n};\r\n\r\nTicker.once = function (event, fn, context) {\r\n Ticker.prototype.once.apply(this.shared, arguments);\r\n};\r\n\r\nTicker.removeListener = function (event, fn) {\r\n Ticker.prototype.removeListener.apply(this.shared, arguments);\r\n};\r\n\r\n\r\nTicker.shared = new Ticker(true);","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * An UI sprite object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param Texture {PIXI.Texture} The texture for the sprite\r\n * @param [Width=Texture.width] {number} Width of tilingsprite\r\n * @param [Height=Texture.height] {number} Height of tiling sprite\r\n */\r\nfunction TilingSprite(t, width, height) {\r\n this.sprite = new PIXI.extras.TilingSprite(t);\r\n UIBase.call(this, width || this.sprite.width, height || this.sprite.height);\r\n this.container.addChild(this.sprite);\r\n}\r\n\r\nTilingSprite.prototype = Object.create(UIBase.prototype);\r\nTilingSprite.prototype.constructor = TilingSprite;\r\nmodule.exports = TilingSprite;\r\n\r\n/**\r\n * Updates the text\r\n *\r\n * @private\r\n */\r\nTilingSprite.prototype.update = function () {\r\n if (this.tint !== null)\r\n this.sprite.tint = this.tint;\r\n\r\n if (this.blendMode !== null)\r\n this.sprite.blendMode = this.blendMode;\r\n\r\n this.sprite.width = this._width;\r\n this.sprite.height = this._height;\r\n};\r\n\r\nObject.defineProperties(TilingSprite.prototype, {\r\n tilePosition: {\r\n get: function () {\r\n return this.sprite.tilePosition;\r\n },\r\n set: function (val) {\r\n this.sprite.tilePosition = val;\r\n }\r\n },\r\n tileScale: {\r\n get: function () {\r\n return this.sprite.tileScale;\r\n },\r\n set: function (val) {\r\n this.sprite.tileScale = val;\r\n }\r\n }\r\n});","var MathHelper = require('./MathHelper');\r\nvar Ease = require('./Ease/Ease');\r\nvar _tweenItemCache = [];\r\nvar _callbackItemCache = [];\r\nvar _tweenObjects = {};\r\nvar _activeTweenObjects = {};\r\nvar _currentId = 0;\r\n\r\nvar TweenObject = function (object) {\r\n this.object = object;\r\n this.tweens = {};\r\n this.active = false;\r\n};\r\n\r\nvar CallbackItem = function () {\r\n this._ready = false;\r\n this.obj = null;\r\n this.parent = null;\r\n this.key = \"\";\r\n this.time = 0;\r\n this.callback = null;\r\n this.currentTime = 0;\r\n};\r\n\r\nCallbackItem.prototype.set = function (obj, callback, time) {\r\n\r\n\r\n this.obj = obj.object;\r\n\r\n if (!this.obj._currentCallbackID)\r\n this.obj._currentCallbackID = 1;\r\n else\r\n this.obj._currentCallbackID++;\r\n\r\n this.time = time;\r\n this.parent = obj;\r\n this.callback = callback;\r\n this._ready = false;\r\n this.key = \"cb_\" + this.obj._currentCallbackID;\r\n this.currentTime = 0;\r\n if (!this.parent.active) {\r\n this.parent.active = true;\r\n _activeTweenObjects[this.obj._tweenObjectId] = this.parent;\r\n }\r\n};\r\n\r\nCallbackItem.prototype.update = function (delta) {\r\n this.currentTime += delta;\r\n if (this.currentTime >= this.time) {\r\n this._ready = true;\r\n delete this.parent.tweens[this.key];\r\n if (!Object.keys(this.parent.tweens).length) {\r\n this.parent.active = false;\r\n delete _activeTweenObjects[this.obj._tweenObjectId];\r\n }\r\n this.callback();\r\n }\r\n};\r\n\r\nvar TweenItem = function () {\r\n this._ready = false;\r\n this.parent = null;\r\n this.obj = null;\r\n this.key = \"\";\r\n this.from = 0;\r\n this.to = 0;\r\n this.time = 0;\r\n this.ease = 0;\r\n this.currentTime = 0;\r\n this.t = 0;\r\n};\r\n\r\n\r\nTweenItem.prototype.set = function (obj, key, from, to, time, ease) {\r\n this.parent = obj;\r\n this.obj = obj.object;\r\n this.key = key;\r\n this.surfix = getSurfix(to);\r\n this.to = getToValue(to);\r\n this.from = getFromValue(from, to, this.obj, key);\r\n this.time = time;\r\n this.currentTime = 0;\r\n this.ease = ease;\r\n this._ready = false;\r\n\r\n if (!this.parent.active) {\r\n this.parent.active = true;\r\n _activeTweenObjects[this.obj._tweenObjectId] = this.parent;\r\n }\r\n\r\n};\r\n\r\nTweenItem.prototype.update = function (delta) {\r\n this.currentTime += delta;\r\n this.t = Math.min(this.currentTime, this.time) / this.time;\r\n if (this.ease)\r\n this.t = this.ease.getPosition(this.t);\r\n\r\n var val = MathHelper.Lerp(this.from, this.to, this.t);\r\n this.obj[this.key] = this.surfix ? val + this.surfix : val;\r\n\r\n if (this.currentTime >= this.time) {\r\n this._ready = true;\r\n delete this.parent.tweens[this.key];\r\n if (!Object.keys(this.parent.tweens).length) {\r\n this.parent.active = false;\r\n delete _activeTweenObjects[this.obj._tweenObjectId];\r\n }\r\n }\r\n};\r\n\r\n\r\n\r\nvar widthKeys = [\"width\", \"minWidth\", \"maxWidth\", \"anchorLeft\", \"anchorRight\", \"left\", \"right\", \"x\"];\r\nvar heightKeys = [\"height\", \"minHeight\", \"maxHeight\", \"anchorTop\", \"anchorBottom\", \"top\", \"bottom\", \"y\"];\r\n\r\n\r\nfunction getFromValue(from, to, obj, key) {\r\n //both number\r\n if (!isNaN(from) && !isNaN(to))\r\n return from;\r\n\r\n //both percentage\r\n if (isNaN(from) && isNaN(to) && from.indexOf('%') !== -1 && to.indexOf('%') !== -1)\r\n return parseFloat(from.replace('%', ''));\r\n\r\n //convert from to px\r\n if (isNaN(from) && !isNaN(to) && from.indexOf('%') !== -1) {\r\n if (widthKeys.indexOf(key) !== -1)\r\n return obj.parent._width * (parseFloat(from.replace('%', '')) * 0.01);\r\n else if (heightKeys.indexOf(key) !== -1)\r\n return obj.parent._height * (parseFloat(from.replace('%', '')) * 0.01);\r\n else\r\n return 0;\r\n }\r\n\r\n //convert from to percentage\r\n if (!isNaN(from) && isNaN(to) && to.indexOf('%') !== -1) {\r\n if (widthKeys.indexOf(key) !== -1)\r\n return from / obj.parent._width * 100;\r\n else if (heightKeys.indexOf(key) !== -1)\r\n return from / obj.parent._height * 100;\r\n else\r\n return 0;\r\n }\r\n return 0;\r\n}\r\n\r\nfunction getSurfix(to) {\r\n if (isNaN(to) && to.indexOf('%') !== -1)\r\n return \"%\";\r\n}\r\n\r\nfunction getToValue(to) {\r\n if (!isNaN(to))\r\n return to;\r\n if (isNaN(to) && to.indexOf('%') !== -1)\r\n return parseFloat(to.replace('%', ''));\r\n}\r\n\r\n\r\nfunction getObject(obj) {\r\n if (!obj._tweenObjectId) {\r\n obj._tweenObjectId = _currentId;\r\n _currentId++;\r\n }\r\n var object = _tweenObjects[obj._tweenObjectId];\r\n if (!object) {\r\n object = _tweenObjects[obj._tweenObjectId] = new TweenObject(obj);\r\n }\r\n return object;\r\n}\r\n\r\nfunction getTweenItem() {\r\n for (var i = 0; i < _tweenItemCache.length; i++) {\r\n if (_tweenItemCache[i]._ready)\r\n return _tweenItemCache[i];\r\n }\r\n\r\n var tween = new TweenItem();\r\n _tweenItemCache.push(tween);\r\n return tween;\r\n}\r\n\r\nfunction getCallbackItem() {\r\n for (var i = 0; i < _callbackItemCache.length; i++) {\r\n if (_callbackItemCache[i]._ready)\r\n return _callbackItemCache[i];\r\n }\r\n\r\n var cb = new CallbackItem();\r\n _callbackItemCache.push(cb);\r\n return cb;\r\n}\r\n\r\nvar Tween = {\r\n to: function (obj, time, params, ease) {\r\n var object = getObject(obj);\r\n for (var key in params) {\r\n if (key === \"onComplete\") {\r\n var cb = getCallbackItem();\r\n cb.set(object, params[key], time);\r\n object.tweens[cb.key] = cb;\r\n continue;\r\n }\r\n\r\n if (time) {\r\n if (params[key] == obj[key] || typeof obj[key] === \"undefined\") continue;\r\n if (!object.tweens[key])\r\n object.tweens[key] = getTweenItem();\r\n object.tweens[key].set(object, key, obj[key], params[key], time, ease);\r\n }\r\n }\r\n if (!time) this.set(obj, params);\r\n },\r\n from: function (obj, time, params, ease) {\r\n var object = getObject(obj);\r\n for (var key in params) {\r\n if (key === \"onComplete\") {\r\n var cb = getCallbackItem();\r\n cb.set(object, params[key], time);\r\n object.tweens[cb.key] = cb;\r\n continue;\r\n }\r\n\r\n if (time) {\r\n if (params[key] == obj[key] || typeof obj[key] === \"undefined\") continue;\r\n if (!object.tweens[key])\r\n object.tweens[key] = getTweenItem();\r\n object.tweens[key].set(object, key, params[key], obj[key], time, ease);\r\n }\r\n }\r\n if (!time) this.set(obj, params);\r\n },\r\n fromTo: function (obj, time, paramsFrom, paramsTo, ease) {\r\n var object = getObject(obj);\r\n for (var key in paramsTo) {\r\n if (key === \"onComplete\") {\r\n var cb = getCallbackItem();\r\n cb.set(object, paramsTo[key], time);\r\n object.tweens[cb.key] = cb;\r\n continue;\r\n }\r\n if (time) {\r\n if (paramsFrom[key] == paramsTo[key] || typeof obj[key] === \"undefined\" || typeof paramsFrom[key] === \"undefined\") continue;\r\n if (!object.tweens[key]) {\r\n object.tweens[key] = getTweenItem();\r\n }\r\n object.tweens[key].set(object, key, paramsFrom[key], paramsTo[key], time, ease);\r\n }\r\n }\r\n if (!time) this.set(obj, paramsTo);\r\n },\r\n set: function (obj, params) {\r\n var object = getObject(obj);\r\n for (var key in params) {\r\n if (params[key] == obj[key] || typeof obj[key] === \"undefined\") continue;\r\n if (object.tweens[key]) delete object.tweens[key];\r\n obj[key] = params[key];\r\n }\r\n },\r\n _update: function (delta) {\r\n for (var id in _activeTweenObjects) {\r\n var object = _activeTweenObjects[id];\r\n for (var key in object.tweens) {\r\n object.tweens[key].update(delta);\r\n }\r\n }\r\n }\r\n};\r\n\r\n\r\nmodule.exports = Tween;","var UI = {\r\n Stage: require('./Stage'),\r\n Container: require('./Container'),\r\n ScrollingContainer: require('./ScrollingContainer'),\r\n SortableList: require('./SortableList'),\r\n Sprite: require('./Sprite'),\r\n TilingSprite: require('./TilingSprite'),\r\n SliceSprite: require('./SliceSprite'),\r\n Slider: require('./Slider'),\r\n ScrollBar: require('./ScrollBar'),\r\n Text: require('./Text'),\r\n DynamicText: require('./DynamicText/DynamicText'),\r\n DynamicTextStyle: require('./DynamicText/DynamicTextStyle'),\r\n TextInput: require('./TextInput'),\r\n Button: require('./Button'),\r\n CheckBox: require('./CheckBox'),\r\n MathHelper: require('./MathHelper'),\r\n Tween: require('./Tween'),\r\n Ease: require('./Ease/Ease'),\r\n Interaction: require('./Interaction/Interaction'),\r\n Ticker: require('./Ticker').shared,\r\n};\r\n\r\n\r\nmodule.exports = UI;","var UISettings = require('./UISettings'),\r\n UI = require('./UI'),\r\n DragEvent = require('./Interaction/DragEvent'),\r\n DragDropController = require('./Interaction/DragDropController');\r\n\r\n/**\r\n * Base class of all UIObjects\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @param width {Number} Width of the UIObject\r\n * @param height {Number} Height of the UIObject\r\n */\r\nfunction UIBase(width, height) {\r\n PIXI.utils.EventEmitter.call(this);\r\n this.container = new PIXI.Container();\r\n this.setting = new UISettings();\r\n this.children = [];\r\n this.parent = null;\r\n this.stage = null;\r\n this.initialized = false;\r\n this.dragInitialized = false;\r\n this.dropInitialized = false;\r\n this.dirty = true;\r\n this._oldWidth = -1;\r\n this._oldHeight = -1;\r\n this.pixelPerfect = true;\r\n\r\n\r\n if (width && isNaN(width) && width.indexOf('%') != -1) {\r\n this.setting.widthPct = parseFloat(width.replace('%', '')) * 0.01;\r\n }\r\n else {\r\n this.setting.widthPct = null;\r\n }\r\n\r\n if (height && isNaN(height) && height.indexOf('%') != -1)\r\n this.setting.heightPct = parseFloat(height.replace('%', '')) * 0.01;\r\n else {\r\n this.setting.heightPct = null;\r\n }\r\n\r\n this.setting.width = width || 0;\r\n this.setting.height = height || 0;\r\n\r\n //actual values\r\n this._width = 0;\r\n this._height = 0;\r\n this._minWidth = null;\r\n this._minHeight = null;\r\n this._maxWidth = null;\r\n this._maxHeight = null;\r\n this._anchorLeft = null;\r\n this._anchorRight = null;\r\n this._anchorTop = null;\r\n this._anchorBottom = null;\r\n this._left = null;\r\n this._right = null;\r\n this._top = null;\r\n this._bottom = null;\r\n\r\n this._dragPosition = null; //used for overriding positions if tweens is playing\r\n}\r\n\r\nUIBase.prototype = Object.create(PIXI.utils.EventEmitter.prototype);\r\nUIBase.prototype.constructor = UIBase;\r\nmodule.exports = UIBase;\r\n\r\n/**\r\n * Renders the object using the WebGL renderer\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.updatesettings = function (updateChildren, updateParent) {\r\n\r\n if (!this.initialized) {\r\n if (this.parent !== null && this.parent.stage !== null && this.parent.initialized) {\r\n this.initialize();\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n\r\n if (updateParent)\r\n this.updateParent();\r\n\r\n this.baseupdate();\r\n this.update();\r\n\r\n if (updateChildren)\r\n this.updateChildren();\r\n\r\n\r\n\r\n\r\n};\r\n\r\n/**\r\n * Update method (override from other UIObjects)\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.update = function () {\r\n};\r\n\r\n\r\n/**\r\n * Updates the parent\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.updateParent = function () {\r\n if (this.parent !== null) {\r\n if (this.parent.updatesettings) {\r\n this.parent.updatesettings(false, true);\r\n }\r\n }\r\n};\r\n\r\n\r\n/**\r\n * Updates the UIObject with all base settings\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.baseupdate = function () {\r\n //return if parent size didnt change\r\n if (this.parent !== null) {\r\n var parentHeight, parentWidth;\r\n\r\n\r\n\r\n //transform convertion (% etc)\r\n this.dirty = true; \r\n this._width = this.actual_width;\r\n this._height = this.actual_height;\r\n this._minWidth = this.actual_minWidth;\r\n this._minHeight = this.actual_minHeight;\r\n this._maxWidth = this.actual_maxWidth;\r\n this._maxHeight = this.actual_maxHeight;\r\n this._anchorLeft = this.actual_anchorLeft;\r\n this._anchorRight = this.actual_anchorRight;\r\n this._anchorTop = this.actual_anchorTop;\r\n this._anchorBottom = this.actual_anchorBottom;\r\n this._left = this.actual_left;\r\n this._right = this.actual_right;\r\n this._top = this.actual_top;\r\n this._bottom = this.actual_bottom;\r\n this._parentWidth = parentWidth = this.parent._width;\r\n this._parentHeight = parentHeight = this.parent._height;\r\n this.dirty = false;\r\n\r\n\r\n var pivotXOffset = this.pivotX * this._width;\r\n var pivotYOffset = this.pivotY * this._height;\r\n\r\n if (this.pixelPerfect) {\r\n pivotXOffset = Math.round(pivotXOffset);\r\n pivotYOffset = Math.round(pivotYOffset);\r\n }\r\n\r\n\r\n if (this.horizontalAlign === null) {\r\n //get anchors (use left right if conflict)\r\n if (this._anchorLeft !== null && this._anchorRight === null && this._right !== null)\r\n this._anchorRight = this._right;\r\n else if (this._anchorLeft === null && this._anchorRight !== null && this._left !== null)\r\n this._anchorLeft = this._left;\r\n else if (this._anchorLeft === null && this._anchorRight === null && this._left !== null && this._right !== null) {\r\n this._anchorLeft = this._left;\r\n this._anchorRight = this._right;\r\n }\r\n\r\n\r\n var useHorizontalAnchor = this._anchorLeft !== null || this._anchorRight !== null;\r\n var useLeftRight = !useHorizontalAnchor && (this._left !== null || this._right !== null);\r\n\r\n if (useLeftRight) {\r\n if (this._left !== null)\r\n this.container.position.x = this._left;\r\n else if (this._right !== null)\r\n this.container.position.x = parentWidth - this._right;\r\n }\r\n else if (useHorizontalAnchor) {\r\n\r\n if (this._anchorLeft !== null && this._anchorRight === null)\r\n this.container.position.x = this._anchorLeft;\r\n else if (this._anchorLeft === null && this._anchorRight !== null)\r\n this.container.position.x = parentWidth - this._width - this._anchorRight;\r\n else if (this._anchorLeft !== null && this._anchorRight !== null) {\r\n this.container.position.x = this._anchorLeft;\r\n this._width = parentWidth - this._anchorLeft - this._anchorRight;\r\n }\r\n this.container.position.x += pivotXOffset;\r\n }\r\n else {\r\n this.container.position.x = 0;\r\n }\r\n }\r\n\r\n\r\n\r\n if (this.verticalAlign === null) {\r\n //get anchors (use top bottom if conflict)\r\n if (this._anchorTop !== null && this._anchorBottom === null && this._bottom !== null)\r\n this._anchorBottom = this._bottom;\r\n if (this._anchorTop === null && this._anchorBottom !== null && this._top !== null)\r\n this._anchorTop = this._top;\r\n\r\n var useVerticalAnchor = this._anchorTop !== null || this._anchorBottom !== null;\r\n var useTopBottom = !useVerticalAnchor && (this._top !== null || this._bottom !== null);\r\n\r\n if (useTopBottom) {\r\n if (this._top !== null)\r\n this.container.position.y = this._top;\r\n else if (this._bottom !== null)\r\n this.container.position.y = parentHeight - this._bottom;\r\n }\r\n else if (useVerticalAnchor) {\r\n if (this._anchorTop !== null && this._anchorBottom === null)\r\n this.container.position.y = this._anchorTop;\r\n else if (this._anchorTop === null && this._anchorBottom !== null)\r\n this.container.position.y = parentHeight - this._height - this._anchorBottom;\r\n else if (this._anchorTop !== null && this._anchorBottom !== null) {\r\n this.container.position.y = this._anchorTop;\r\n this._height = parentHeight - this._anchorTop - this._anchorBottom;\r\n }\r\n this.container.position.y += pivotYOffset;\r\n }\r\n else {\r\n this.container.position.y = 0;\r\n }\r\n }\r\n\r\n //min/max sizes\r\n if (this._maxWidth !== null && this._width > this._maxWidth) this._width = this._maxWidth;\r\n if (this._width < this._minWidth) this._width = this._minWidth;\r\n\r\n if (this._maxHeight !== null && this._height > this._maxHeight) this._height = this._maxHeight;\r\n if (this._height < this._minHeight) this._height = this._minHeight;\r\n\r\n\r\n //pure vertical/horizontal align\r\n if (this.horizontalAlign !== null) {\r\n if (this.horizontalAlign == \"center\")\r\n this.container.position.x = parentWidth * 0.5 - this._width * 0.5;\r\n else if (this.horizontalAlign == \"right\")\r\n this.container.position.x = parentWidth - this._width;\r\n else\r\n this.container.position.x = 0;\r\n this.container.position.x += pivotXOffset;\r\n }\r\n if (this.verticalAlign !== null) {\r\n if (this.verticalAlign == \"middle\")\r\n this.container.position.y = parentHeight * 0.5 - this._height * 0.5;\r\n else if (this.verticalAlign == \"bottom\")\r\n this.container.position.y = parentHeight - this._height;\r\n else\r\n this.container.position.y = 0;\r\n this.container.position.y += pivotYOffset;\r\n }\r\n\r\n\r\n //Unrestricted dragging\r\n if (this.dragging && !this.setting.dragRestricted) {\r\n this.container.position.x = this._dragPosition.x;\r\n this.container.position.y = this._dragPosition.y;\r\n }\r\n\r\n\r\n //scale\r\n if (this.setting.scaleX !== null) this.container.scale.x = this.setting.scaleX;\r\n if (this.setting.scaleY !== null) this.container.scale.y = this.setting.scaleY;\r\n\r\n //pivot\r\n if (this.setting.pivotX !== null) this.container.pivot.x = pivotXOffset;\r\n if (this.setting.pivotY !== null) this.container.pivot.y = pivotYOffset;\r\n\r\n if (this.setting.alpha !== null) this.container.alpha = this.setting.alpha;\r\n if (this.setting.rotation !== null) this.container.rotation = this.setting.rotation;\r\n\r\n //make pixel perfect\r\n if (this.pixelPerfect) {\r\n this._width = Math.round(this._width);\r\n this._height = Math.round(this._height);\r\n this.container.position.x = Math.round(this.container.position.x);\r\n this.container.position.y = Math.round(this.container.position.y);\r\n }\r\n\r\n\r\n\r\n }\r\n};\r\n\r\n\r\n/**\r\n * Updates all UI Children\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.updateChildren = function () {\r\n for (var i = 0; i < this.children.length; i++) {\r\n this.children[i].updatesettings(true);\r\n }\r\n};\r\n\r\nUIBase.prototype.addChild = function (UIObject) {\r\n var argumentsLength = arguments.length;\r\n if (argumentsLength > 1) {\r\n for (var i = 0; i < argumentsLength; i++) {\r\n this.addChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n if (UIObject.parent) {\r\n UIObject.parent.removeChild(UIObject);\r\n }\r\n\r\n UIObject.parent = this;\r\n this.container.addChild(UIObject.container);\r\n this.children.push(UIObject);\r\n this.updatesettings(true, true);\r\n }\r\n\r\n return UIObject;\r\n};\r\n\r\nUIBase.prototype.removeChild = function (UIObject) {\r\n var argumentLenght = arguments.length;\r\n if (argumentLenght > 1) {\r\n for (var i = 0; i < argumentLenght; i++) {\r\n this.removeChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n var index = this.children.indexOf(UIObject);\r\n if (index !== -1) {\r\n var oldUIParent = UIObject.parent;\r\n var oldParent = UIObject.container.parent;\r\n UIObject.container.parent.removeChild(UIObject.container);\r\n this.children.splice(index, 1);\r\n UIObject.parent = null;\r\n\r\n //oldParent._recursivePostUpdateTransform();\r\n setTimeout(function () { //hack but cant get the transforms to update propertly otherwice?\r\n if (oldUIParent.updatesettings)\r\n oldUIParent.updatesettings(true, true);\r\n }, 0);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Initializes the object when its added to an UIStage\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.initialize = function () {\r\n this.initialized = true;\r\n this.stage = this.parent.stage;\r\n if (this.draggable) {\r\n this.initDraggable();\r\n }\r\n\r\n if (this.droppable) {\r\n this.initDroppable();\r\n }\r\n};\r\n\r\nUIBase.prototype.clearDraggable = function () {\r\n if (this.dragInitialized) {\r\n this.dragInitialized = false;\r\n this.drag.stopEvent();\r\n }\r\n};\r\n\r\nUIBase.prototype.initDraggable = function () {\r\n if (!this.dragInitialized) {\r\n this.dragInitialized = true;\r\n var containerStart = new PIXI.Point(),\r\n stageOffset = new PIXI.Point(),\r\n self = this;\r\n\r\n this._dragPosition = new PIXI.Point();\r\n this.drag = new DragEvent(this);\r\n this.drag.onDragStart = function (e) {\r\n var added = DragDropController.add(this, e);\r\n if (!this.dragging && added) {\r\n this.dragging = true;\r\n this.container.interactive = false;\r\n containerStart.copy(this.container.position);\r\n if (this.dragContainer) {\r\n var c = this.dragContainer.container ? this.dragContainer.container : this.dragContainer;\r\n if (c) {\r\n //_this.container._recursivePostUpdateTransform();\r\n stageOffset.set(c.worldTransform.tx - this.parent.container.worldTransform.tx, c.worldTransform.ty - this.parent.container.worldTransform.ty);\r\n c.addChild(this.container);\r\n }\r\n } else {\r\n stageOffset.set(0);\r\n }\r\n\r\n }\r\n };\r\n\r\n\r\n this.drag.onDragMove = function (e, offset) {\r\n if (this.dragging) {\r\n this._dragPosition.set(containerStart.x + offset.x - stageOffset.x, containerStart.y + offset.y - stageOffset.y);\r\n this.x = this._dragPosition.x;\r\n this.y = this._dragPosition.y;\r\n }\r\n };\r\n\r\n this.drag.onDragEnd = function (e) {\r\n if (this.dragging) {\r\n this.dragging = false;\r\n //Return to container after 1ms if not picked up by a droppable\r\n setTimeout(function () {\r\n self.container.interactive = true;\r\n var item = DragDropController.getItem(self);\r\n if (item) {\r\n var container = self.parent === self.stage ? self.stage : self.parent.container;\r\n container.toLocal(self.container.position, self.container.parent, self);\r\n if (container != self.container) {\r\n self.parent.addChild(self);\r\n }\r\n }\r\n }, 1);\r\n }\r\n\r\n };\r\n }\r\n};\r\n\r\nUIBase.prototype.clearDroppable = function () {\r\n if (this.dropInitialized) {\r\n this.dropInitialized = false;\r\n this.container.removeListener('mouseup', this.onDrop);\r\n this.container.removeListener('touchend', this.onDrop);\r\n }\r\n};\r\n\r\nUIBase.prototype.initDroppable = function () {\r\n if (!this.dropInitialized) {\r\n this.dropInitialized = true;\r\n var container = this.container,\r\n self = this;\r\n\r\n this.container.interactive = true;\r\n this.onDrop = function (event) {\r\n var item = DragDropController.getEventItem(event, self.dropGroup);\r\n if (item && item.dragging) {\r\n item.dragging = false;\r\n item.container.interactive = true;\r\n var parent = self.droppableReparent !== null ? self.droppableReparent : self;\r\n parent.container.toLocal(item.container.position, item.container.parent, item);\r\n if (parent.container != item.container.parent)\r\n parent.addChild(item);\r\n }\r\n };\r\n\r\n container.on('mouseup', this.onDrop);\r\n container.on('touchend', this.onDrop);\r\n }\r\n};\r\n\r\nObject.defineProperties(UIBase.prototype, {\r\n x: {\r\n get: function () {\r\n return this.setting.left;\r\n },\r\n set: function (val) {\r\n this.left = val;\r\n }\r\n },\r\n y: {\r\n get: function () {\r\n return this.setting.top;\r\n },\r\n set: function (val) {\r\n this.top = val;\r\n }\r\n },\r\n width: {\r\n get: function () {\r\n return this.setting.width;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.widthPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.widthPct = null;\r\n \r\n this.setting.width = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_width: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.widthPct !== null) {\r\n this._width = this.parent._width * this.setting.widthPct;\r\n }\r\n else {\r\n this._width = this.setting.width;\r\n }\r\n }\r\n return this._width;\r\n }\r\n },\r\n height: {\r\n get: function () {\r\n return this.setting.height;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.heightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.heightPct = null;\r\n \r\n this.setting.height = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_height: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.heightPct !== null) {\r\n this._height = this.parent._height * this.setting.heightPct;\r\n }\r\n else {\r\n this._height = this.setting.height;\r\n }\r\n }\r\n return this._height;\r\n }\r\n },\r\n minWidth: {\r\n get: function () {\r\n return this.setting.minWidth;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.minWidthPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.minWidthPct = null;\r\n \r\n this.setting.minWidth = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_minWidth: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.minWidthPct !== null) {\r\n this._minWidth = this.parent._width * this.setting.minWidthPct;\r\n }\r\n else {\r\n this._minWidth = this.setting.minWidth;\r\n }\r\n }\r\n return this._minWidth;\r\n }\r\n },\r\n minHeight: {\r\n get: function () {\r\n return this.setting.minHeight;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.minHeightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.minHeightPct = null;\r\n \r\n this.setting.minHeight = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_minHeight: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.minHeightPct !== null) {\r\n this._minHeight = this.parent._height * this.setting.minHeightPct;\r\n }\r\n else {\r\n this._minHeight = this.setting.minHeight;\r\n }\r\n }\r\n return this._minHeight;\r\n }\r\n },\r\n maxWidth: {\r\n get: function () {\r\n return this.setting.maxWidth;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.maxWidthPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.maxWidthPct = null;\r\n \r\n\r\n this.setting.maxWidth = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_maxWidth: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.maxWidthPct !== null) {\r\n this._maxWidth = this.parent._width * this.setting.maxWidthPct;\r\n }\r\n else {\r\n this._maxWidth = this.setting.maxWidth;\r\n }\r\n }\r\n return this._maxWidth;\r\n }\r\n },\r\n maxHeight: {\r\n get: function () {\r\n return this.setting.maxHeight;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.maxHeightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.maxHeightPct = null;\r\n \r\n this.setting.maxHeight = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_maxHeight: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.maxHeightPct !== null) {\r\n this._maxHeight = this.parent._height * this.setting.maxHeightPct;\r\n }\r\n else {\r\n this._maxHeight = this.setting.maxHeight;\r\n }\r\n }\r\n return this._maxHeight;\r\n }\r\n },\r\n anchorLeft: {\r\n get: function () {\r\n return this.setting.anchorLeft;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1) \r\n this.setting.anchorLeftPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else \r\n this.setting.anchorLeftPct = null;\r\n \r\n this.setting.anchorLeft = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorLeft: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorLeftPct !== null) {\r\n this._anchorLeft = this.parent._width * this.setting.anchorLeftPct;\r\n }\r\n else {\r\n this._anchorLeft = this.setting.anchorLeft;\r\n }\r\n }\r\n return this._anchorLeft;\r\n }\r\n },\r\n anchorRight: {\r\n get: function () {\r\n return this.setting.anchorRight;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.anchorRightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.anchorRightPct = null;\r\n \r\n this.setting.anchorRight = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorRight: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorRightPct !== null) {\r\n this._anchorRight = this.parent._width * this.setting.anchorRightPct;\r\n }\r\n else {\r\n this._anchorRight = this.setting.anchorRight;\r\n }\r\n }\r\n return this._anchorRight;\r\n }\r\n },\r\n anchorTop: {\r\n get: function () {\r\n return this.setting.anchorTop;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.anchorTopPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.anchorTopPct = null;\r\n \r\n this.setting.anchorTop = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorTop: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorTopPct !== null) {\r\n this._anchorTop = this.parent._height * this.setting.anchorTopPct;\r\n }\r\n else {\r\n this._anchorTop = this.setting.anchorTop;\r\n }\r\n }\r\n return this._anchorTop;\r\n }\r\n },\r\n anchorBottom: {\r\n get: function () {\r\n return this.setting.anchorBottom;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.anchorBottomPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else \r\n this.setting.anchorBottomPct = null;\r\n \r\n this.setting.anchorBottom = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorBottom: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorBottomPct !== null) {\r\n this._anchorBottom = this.parent._height * this.setting.anchorBottomPct;\r\n }\r\n else {\r\n this._anchorBottom = this.setting.anchorBottom;\r\n }\r\n }\r\n return this._anchorBottom;\r\n }\r\n },\r\n left: {\r\n get: function () {\r\n return this.setting.left;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.leftPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.leftPct = null;\r\n \r\n this.setting.left = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_left: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.leftPct !== null) {\r\n this._left = this.parent._width * this.setting.leftPct;\r\n }\r\n else {\r\n this._left = this.setting.left;\r\n }\r\n }\r\n return this._left;\r\n }\r\n },\r\n right: {\r\n get: function () {\r\n return this.setting.right;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.rightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.rightPct = null;\r\n\r\n this.setting.right = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_right: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.rightPct !== null) {\r\n this._right = this.parent._width * this.setting.rightPct;\r\n }\r\n else {\r\n this._right = this.setting.right;\r\n }\r\n }\r\n return this._right;\r\n }\r\n },\r\n top: {\r\n get: function () {\r\n return this.setting.top;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.topPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.topPct = null;\r\n\r\n this.setting.top = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_top: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.topPct !== null) {\r\n this._top = this.parent._height * this.setting.topPct;\r\n }\r\n else {\r\n this._top = this.setting.top;\r\n }\r\n }\r\n return this._top;\r\n }\r\n },\r\n bottom: {\r\n get: function () {\r\n return this.setting.bottom;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.bottomPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.bottomPct = null;\r\n\r\n this.setting.bottom = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_bottom: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.bottomPct !== null) {\r\n this._bottom = this.parent._height * this.setting.bottomPct;\r\n }\r\n else {\r\n this._bottom = this.setting.bottom;\r\n }\r\n }\r\n return this._bottom;\r\n }\r\n },\r\n verticalAlign: {\r\n get: function () {\r\n return this.setting.verticalAlign;\r\n },\r\n set: function (val) {\r\n this.setting.verticalAlign = val;\r\n this.baseupdate();\r\n }\r\n },\r\n horizontalAlign: {\r\n get: function () {\r\n return this.setting.horizontalAlign;\r\n },\r\n set: function (val) {\r\n this.setting.horizontalAlign = val;\r\n this.baseupdate();\r\n }\r\n },\r\n tint: {\r\n get: function () {\r\n return this.setting.tint;\r\n },\r\n set: function (val) {\r\n this.setting.tint = val;\r\n this.update();\r\n }\r\n },\r\n alpha: {\r\n get: function () {\r\n return this.setting.alpha;\r\n },\r\n set: function (val) {\r\n this.setting.alpha = val;\r\n this.container.alpha = val;\r\n }\r\n },\r\n rotation: {\r\n get: function () {\r\n return this.setting.rotation;\r\n },\r\n set: function (val) {\r\n this.setting.rotation = val;\r\n this.container.rotation = val;\r\n }\r\n },\r\n blendMode: {\r\n get: function () {\r\n return this.setting.blendMode;\r\n },\r\n set: function (val) {\r\n this.setting.blendMode = val;\r\n this.update();\r\n }\r\n },\r\n pivotX: {\r\n get: function () {\r\n return this.setting.pivotX;\r\n },\r\n set: function (val) {\r\n this.setting.pivotX = val;\r\n this.baseupdate();\r\n this.update();\r\n }\r\n },\r\n pivotY: {\r\n get: function () {\r\n return this.setting.pivotY;\r\n },\r\n set: function (val) {\r\n this.setting.pivotY = val;\r\n this.baseupdate();\r\n this.update();\r\n }\r\n },\r\n pivot: {\r\n set: function (val) {\r\n this.setting.pivotX = val;\r\n this.setting.pivotY = val;\r\n this.baseupdate();\r\n this.update();\r\n }\r\n },\r\n scaleX: {\r\n get: function () {\r\n return this.setting.scaleX;\r\n },\r\n set: function (val) {\r\n this.setting.scaleX = val;\r\n this.container.scale.x = val;\r\n }\r\n },\r\n scaleY: {\r\n get: function () {\r\n return this.setting.scaleY;\r\n },\r\n set: function (val) {\r\n this.setting.scaleY = val;\r\n this.container.scale.y = val;\r\n }\r\n },\r\n scale: {\r\n get: function () {\r\n return this.setting.scaleX;\r\n },\r\n set: function (val) {\r\n this.setting.scaleX = val;\r\n this.setting.scaleY = val;\r\n this.container.scale.x = val;\r\n this.container.scale.y = val;\r\n }\r\n },\r\n\r\n draggable: {\r\n get: function () {\r\n return this.setting.draggable;\r\n },\r\n set: function (val) {\r\n this.setting.draggable = val;\r\n if (this.initialized) {\r\n if (val)\r\n this.initDraggable();\r\n else\r\n this.clearDraggable();\r\n }\r\n }\r\n },\r\n dragRestricted: {\r\n get: function () {\r\n return this.setting.dragRestricted;\r\n },\r\n set: function (val) {\r\n this.setting.dragRestricted = val;\r\n }\r\n },\r\n dragRestrictAxis: {\r\n get: function () {\r\n return this.setting.dragRestrictAxis;\r\n },\r\n set: function (val) {\r\n this.setting.dragRestrictAxis = val;\r\n }\r\n },\r\n dragThreshold: {\r\n get: function () {\r\n return this.setting.dragThreshold;\r\n },\r\n set: function (val) {\r\n this.setting.dragThreshold = val;\r\n }\r\n },\r\n dragGroup: {\r\n get: function () {\r\n return this.setting.dragGroup;\r\n },\r\n set: function (val) {\r\n this.setting.dragGroup = val;\r\n }\r\n },\r\n dragContainer: {\r\n get: function () {\r\n return this.setting.dragContainer;\r\n },\r\n set: function (val) {\r\n this.setting.dragContainer = val;\r\n }\r\n },\r\n droppable: {\r\n get: function () {\r\n return this.setting.droppable;\r\n },\r\n set: function (val) {\r\n this.setting.droppable = true;\r\n if (this.initialized) {\r\n if (val)\r\n this.initDroppable();\r\n else\r\n this.clearDroppable();\r\n }\r\n }\r\n },\r\n droppableReparent: {\r\n get: function () {\r\n return this.setting.droppableReparent;\r\n },\r\n set: function (val) {\r\n this.setting.droppableReparent = val;\r\n }\r\n },\r\n dropGroup: {\r\n get: function () {\r\n return this.setting.dropGroup;\r\n },\r\n set: function (val) {\r\n this.setting.dropGroup = val;\r\n }\r\n },\r\n renderable: {\r\n get: function () {\r\n return this.container.renderable;\r\n },\r\n set: function (val) {\r\n this.container.renderable = val;\r\n }\r\n },\r\n visible: {\r\n get: function () {\r\n return this.container.visible;\r\n },\r\n set: function (val) {\r\n this.container.visible = val;\r\n }\r\n },\r\n cacheAsBitmap: {\r\n get: function () {\r\n return this.container.cacheAsBitmap;\r\n },\r\n set: function (val) {\r\n this.container.cacheAsBitmap = val;\r\n }\r\n },\r\n onClick: {\r\n get: function () {\r\n return this.container.click;\r\n },\r\n set: function (val) {\r\n this.container.click = val;\r\n }\r\n },\r\n interactive: {\r\n get: function () {\r\n return this.container.interactive;\r\n },\r\n set: function (val) {\r\n this.container.interactive = val;\r\n }\r\n },\r\n interactiveChildren: {\r\n get: function () {\r\n return this.container.interactiveChildren;\r\n },\r\n set: function (val) {\r\n this.container.interactiveChildren = val;\r\n }\r\n }\r\n});","/**\r\n * Settings object for all UIObjects\r\n *\r\n * @class\r\n * @memberof PIXI.UI\r\n */\r\nfunction UISettings() {\r\n this.width = 0;\r\n this.height = 0;\r\n this.minHeight = 0;\r\n this.maxWidth = null;\r\n this.maxHeight = null;\r\n this.left = null;\r\n this.right = null;\r\n this.top = null;\r\n this.bottom = null;\r\n this.anchorLeft = null;\r\n this.anchorRight = null;\r\n this.anchorTop = null;\r\n this.anchorBottom = null;\r\n\r\n this.widthPct = null;\r\n this.heightPct = null;\r\n this.minWidthPct = null;\r\n this.minHeightPct = null;\r\n this.maxWidthPct = null;\r\n this.maxHeightPct = null;\r\n this.minWidth = 0;\r\n this.leftPct = null;\r\n this.rightPct = null;\r\n this.topPct = null;\r\n this.bottomPct = null;\r\n this.anchorLeftPct = null;\r\n this.anchorRightPct = null;\r\n this.anchorTopPct = null;\r\n this.anchorBottomPct = null;\r\n\r\n this.pivotX = 0;\r\n this.pivotY = 0;\r\n this.scaleX = 1;\r\n this.scaleY = 1;\r\n this.verticalAlign = null;\r\n this.horizontalAlign = null;\r\n this.rotation = null;\r\n this.blendMode = null;\r\n this.tint = null;\r\n this.alpha = 1;\r\n\r\n\r\n this.draggable = null;\r\n this.dragRestricted = false;\r\n this.dragRestrictAxis = null; //x, y\r\n this.dragThreshold = 0;\r\n this.dragGroup = null;\r\n this.dragContainer = null;\r\n this.droppable = null;\r\n this.droppableReparent = null;\r\n this.dropGroup = null;\r\n}\r\n\r\n\r\nmodule.exports = UISettings;\r\n\r\n\r\n","\r\nvar Library = {\r\n UI: require('./UI')\r\n};\r\n\r\n//dump everything into extras\r\n\r\nObject.assign(PIXI, Library);\r\n\r\nmodule.exports = Library;\r\n"],"sourceRoot":"."} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/emoji-regex/index.js","src/Button.js","src/CheckBox.js","src/Container.js","src/DynamicText/DynamicChar.js","src/DynamicText/DynamicText.js","src/DynamicText/DynamicTextStyle.js","src/Ease/Ease.js","src/Ease/EaseBase.js","src/Ease/ExponentialEase.js","src/InputBase.js","src/Interaction/ClickEvent.js","src/Interaction/DragDropController.js","src/Interaction/DragEvent.js","src/Interaction/InputController.js","src/Interaction/Interaction.js","src/Interaction/MouseScrollEvent.js","src/MathHelper.js","src/ScrollBar.js","src/ScrollingContainer.js","src/SliceSprite.js","src/Slider.js","src/SortableList.js","src/Sprite.js","src/Stage.js","src/Text.js","src/TextInput.js","src/Ticker.js","src/TilingSprite.js","src/Tween.js","src/UI.js","src/UIBase.js","src/UISettings.js","src"],"names":["f","exports","module","define","amd","g","window","global","self","this","pixiUi","min","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","Button","options","InputBase","width","background","height","tabIndex","tabGroup","pivot","verticalAlign","horizontalAlign","addChild","isHover","uiText","text","container","buttonMode","keyDownEvent","which","click","clickEvent","ClickEvent","onHover","emit","onLeave","onPress","isPressed","focus","data","originalEvent","preventDefault","onClick","_focused","prototype","document","addEventListener","blur","removeEventListener","initialize","interactiveChildren","setTimeout","hitArea","getLocalBounds","Object","create","constructor","defineProperties","value","get","set","val","CheckBox","_checked","undefined","checked","_value","checkGroup","checkgroup","checkmark","alpha","InputController","registrerCheckGroup","change","updateCheckGroupSelected","selectedValue","getCheckGroupSelectedValue","setCheckGroupSelectedValue","Container","UIBase","PIXI","Rectangle","update","_width","_height","DynamicChar","style","space","newline","emoji","charcode","wordIndex","lineIndex","DynamicText","atlas","DynamicAtlas","autoWidth","autoHeight","defaultStyle","_style","DynamicTextStyle","merge","chars","renderChars","spriteCache","charContainer","_inputText","lastWidth","lastHeight","dirtyText","dirtyStyle","dirtyRender","lineWidthData","lineHeightData","lineFontSizeData","lineAlignmentData","renderCount","charCount","lineEllipsisData","lineHasEllipsis","render","yOffset","xOffset","currentLine","removeSprite","visible","char","lineWidth","lineHeight","maxLineWidth","Math","max","texture","tex","sprite","Sprite","anchor","x","y","tint","hexToInt","rotation","float","skew","parent","prepareForRender","pos","Point","lineFontSize","lineAlignment","align","lastSpaceIndex","lastSpaceLineWidth","textHeight","forceNewline","renderIndex","ellipsis","lineFull","lastChar","overflowY","fontSize","size","round","letterSpacing","wrap","breakWords","overflowX","ellipsisData","d","dot","getCharObject","parseFloat","closeTags","processInputText","styleTree","charIndex","inputTextIndex","inputArray","Array","from","c","charCodeAt","test","allowTags","tag","substring","slice","indexOf","FoundTag","clone","fontStyle","push","fontWeight","splice","startsWith","regex","match","exec","emojiMatch","emojiRegex","fontFamily","settings","defaultEmojiFont","lazyUpdate","console","log","dirtySize","def","isNaN","int","parseInt","string","str","result","replace","hexToRgba","hex","debugSpriteSheet","metricsCanvas","createElement","metricsContext","getContext","padding","canvas","context","objects","baseTexture","lazyTimeout","rootNode","atlasdim","newObjects","devicePixelRatio","canvasList","startdim","maxdim","AtlasNode","w","h","children","rect","insert","obj","newNode","frame","dw","dh","addCanvas","BaseTexture","fromCanvas","mipmap","resolution","className","body","appendChild","fontFamilyCache","drawObjects","arr","resized","drawObject","drawImage","_cache","font","ctxFont","familyCache","key","ctxKey","metrics","generateCharData","bounds","minx","descent","Texture","addNewObjects","compareFunction","b","sort","_resized","_newcanvas","node","resizeCanvas","dim","measureText","paddingY","paddingX","ceil","baseline","clearRect","save","shadowData","trim","split","color","fillData","position","rgba","getFillStyle","fills","filter","gradEnd","gradient","createLinearGradient","addColorStop","drawShadows","shadowString","stroke","shadows","globalAlpha","shadowColor","shadowOffsetX","shadowOffsetY","shadowBlur","strokeText","fillText","restore","shadow","strokeShadow","fillStyle","fill","strokeStyle","strokeFill","pixelData","getImageData","line","len","ascent","step","maxx","miny","maxy","respectDirty","_parent","_scale","_align","_fontFamily","_fontSize","_fontWeight","_fontStyle","_letterSpacing","_lineHeight","_verticalAlign","_rotation","_skew","_tint","_fill","_shadow","_stroke","_strokeFill","_strokeShadow","_wrap","_breakWords","_overflowX","_overflowY","_ellipsis","_cachedEllipsisSize","ellipsisSize","param","_dirty","join","scale","fn","EaseBase","getPosition","wrapEase","easeInFunction","easeOutFunction","easeInOutFunction","easeIn","easeOut","easeInOut","Ease","ExponentialEase","HALF_PI","PI","Linear","Power0","easeNone","Power1","Quad","Power2","Cubic","Power3","Quart","Power4","Quint","Bounce","BounceIn","p","BounceOut","BounceInOut","invert","Circ","CircIn","sqrt","CircOut","CircInOut","Expo","ExpoIn","pow","ExpoOut","ExpoInOut","Sine","SineIn","cos","SineOut","sin","SineInOut","power","_useTab","_usePrev","_useNext","interactive","registrer","fireTab","firePrev","fireNext","documentMouseDown","__down","on","_bindEvents","stage","_clearEvents","off","clear","bound","id","ishover","mouse","offset","movementX","movementY","_onMouseDown","event","copy","identifier","_onMouseUp","_onMouseUpOutside","_mouseUpAll","removeListener","abs","dragThreshold","_onMouseOver","_onMouseOut","stopEvent","startEvent","_items","DragDropController","add","item","_dragDropEventId","getItem","object","index","getEventItem","group","dragGroup","DragEvent","start","cancel","dragging","_onDragStart","_onDragMove","_onDragEnd","dragRestrictAxis","onDragStart","onDragMove","onDragEnd","_currentItem","tabGroups","checkGroups","checkGroupValues","groupName","items","_tabIndex","_tabGroup","cb","name","Interaction","MouseScrollEvent","delta","_onMouseScroll","deltaX","deltaY","onMouseScroll","_onHover","MathHelper","Lerp","stop","amt","Round","number","decimals","ScrollBar","Slider","track","handle","vertical","scrollingContainer","autohide","_hidden","Tween","_onValueChanging","sizeAmt","innerContainer","forcePctPosition","_amt","_scrollBars","alignToContainer","newPos","x_y","width_height","top_left","_posAmt","toggleHidden","hidden","to","ScrollingContainer","mask","Graphics","innerBounds","scrollX","scrollY","dragScrolling","softness","radius","expandMask","animating","scrolling","boundCached","performance","now","Ticker","apply","initScrolling","_lastWidth","_lastHeight","of","lineStyle","beginFill","drawRect","drawRoundedRect","endFill","setScrollPosition","UIObject","argumentsLength","arguments","getInnerBounds","updateScrollBars","force","containerStart","targetPosition","lastPosition","Position","Speed","direction","pct","focusPosition","dif","speed","updateScrollPosition","updateDirection","target","exp","drag","scrollSpeed","scroll","SliceSprite","borderWidth","horizontalSlice","verticalSlice","tile","ftl","ftr","fbl","fbr","ft","fb","fl","fr","ff","stl","sbl","sbr","st","sb","sl","sr","sf","bw","vs","hs","setting","minWidth","minHeight","extras","TilingSprite","addChildAt","initialized","blendMode","_disabled","_minValue","minValue","_maxValue","maxValue","_onValueChange","onValueChange","onValueChanging","soft","handleSize","top","left","startValue","handleDrag","stopPropagation","maxPosition","triggerValueChanging","triggerValueChange","localMousePosition","trackDrag","updatePositionToMouse","mousePosition","toLocal","maxPos","_lastChange","_lastChanging","disabled","SortableList","desc","tweenTime","tweenEase","fnValue","fnThenBy","_sortListValue","_sortListThenByValue","_sortListRnd","random","removeChild","instant","clearTimeout","_sortTimeout","_sort","_this","alt","res","fromTo","altering","updatesettings","fromFrame","frameId","fromImage","imageUrl","Stage","__width","__height","UIChildren","argumentLenght","resize","rx","ry","Text","PIXITextStyle","_text","baseupdate","_anchorLeft","_anchorRight","widthPct","_anchorTop","_anchorBottom","heightPct","TextInput","_pui_tempInput","setAttribute","_dirtyText","maxLength","_lastValue","multiLine","selectedColor","selectedBackgroundColor","tempText","destroy","selection","_startIndex","_endIndex","caret","_index","caretWidth","moveTo","lineTo","paddingLeft","paddingRight","paddingBottom","paddingTop","textContainer","UI","anchorTop","anchorBottom","anchorLeft","anchorRight","cacheAsBitmap","updateText","setCaretIndex","hasSelection","updateSelectionGraphics","caretInterval","si","sie","ei","eie","sp","ds","de","rdd","vrdd","selectionStart","selectionEnd","cc","textLengthPX","textHeightPX","lineIndexMax","ctrlDown","shiftDown","shiftKey","ctrlKey","cmdKey","whitespace","lastWordIndex","charText","wrapped","updateClosestIndex","point","currentClosest","currentDistX","currentIndex","atEnd","closestLineIndex","floor","distX","deleteSelection","updateSelectionColors","_sp","scrollToPosition","resetScrollPosition","hideCaret","clearInterval","showCaret","clearSelection","setInterval","insertTextAtCaret","_atEnd","select","caretAtStart","_forward","startindex","selectRange","endIndex","_i","selectIndex","_down","keyUpEvent","copyEvent","clipboardData","setData","cutEvent","pasteEvent","getData","inputEvent","inputBlurEvent","mouseDown","timeSinceLast","selectWord","worldTransform","tx","ty","startIndex","drawSelectionRect","c1","cx","cy","cl","end","autoStart","utils","EventEmitter","_now","DeltaTime","Time","Ms","shared","time","_update","requestAnimationFrame","once","tilePosition","tileScale","getFromValue","widthKeys","heightKeys","getSurfix","getToValue","getObject","_tweenObjectId","_currentId","_tweenObjects","TweenObject","getTweenItem","_tweenItemCache","_ready","tween","TweenItem","getCallbackItem","_callbackItemCache","CallbackItem","_activeTweenObjects","tweens","active","callback","currentTime","_currentCallbackID","keys","ease","surfix","params","paramsFrom","paramsTo","UISettings","dragInitialized","dropInitialized","dirty","_oldWidth","_oldHeight","pixelPerfect","_minWidth","_minHeight","_maxWidth","_maxHeight","_left","_right","_top","_bottom","_dragPosition","updateChildren","updateParent","parentHeight","parentWidth","actual_width","actual_height","actual_minWidth","actual_minHeight","actual_maxWidth","actual_maxHeight","actual_anchorLeft","actual_anchorRight","actual_anchorTop","actual_anchorBottom","actual_left","actual_right","actual_top","actual_bottom","_parentWidth","_parentHeight","pivotXOffset","pivotX","pivotYOffset","pivotY","useHorizontalAnchor","useLeftRight","useVerticalAnchor","useTopBottom","dragRestricted","scaleX","scaleY","oldUIParent","draggable","initDraggable","droppable","initDroppable","clearDraggable","stageOffset","added","dragContainer","clearDroppable","onDrop","dropGroup","droppableReparent","minWidthPct","minHeightPct","maxWidth","maxWidthPct","maxHeight","maxHeightPct","anchorLeftPct","anchorRightPct","anchorTopPct","anchorBottomPct","leftPct","right","rightPct","topPct","bottom","bottomPct","renderable","Library","assign"],"mappings":"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","file":"pixi-ui.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o renderCount) {\r\n for (i = renderCount; i < spriteCache.length; i++) {\r\n var removeSprite = spriteCache[i];\r\n if (removeSprite)\r\n removeSprite.visible = false;\r\n }\r\n }\r\n\r\n var char, lineWidth = 0, lineHeight = 0, maxLineWidth = 0;\r\n\r\n for (i = 0; i < renderCount; i++) {\r\n char = renderChars[i];\r\n\r\n //get line data\r\n if (currentLine !== char.lineIndex) {\r\n currentLine = char.lineIndex;\r\n lineWidth = lineWidthData[currentLine];\r\n lineHeight = lineHeightData[currentLine];\r\n yOffset += lineHeight;\r\n\r\n\r\n\r\n switch (lineAlignmentData[currentLine]) {\r\n case 'right': xOffset = this._width - lineWidth; break;\r\n case 'center': xOffset = (this._width - lineWidth) * 0.5; break;\r\n default: xOffset = 0;\r\n }\r\n\r\n\r\n maxLineWidth = Math.max(lineWidth, maxLineWidth);\r\n }\r\n\r\n //no reason to render a blank space or 0x0 letters (no texture created)\r\n if (!char.data.texture || char.space || char.newline) {\r\n if (spriteCache[i])\r\n spriteCache[i].visible = false;\r\n continue;\r\n }\r\n\r\n\r\n //add new sprite\r\n var tex = char.data.texture, sprite = spriteCache[i];\r\n\r\n\r\n\r\n if (!sprite) {\r\n sprite = spriteCache[i] = new PIXI.Sprite(tex);\r\n sprite.anchor.set(0.5);\r\n }\r\n else\r\n sprite.texture = tex;\r\n\r\n\r\n\r\n sprite.visible = true;\r\n sprite.x = char.x + xOffset + tex.width * 0.5;\r\n sprite.y = char.y + yOffset - tex.height * 0.5 - (lineHeight - lineFontSizeData[currentLine]);\r\n\r\n\r\n sprite.tint = char.emoji ? 0xffffff : hexToInt(char.style.tint, 0xffffff);\r\n sprite.rotation = float(char.style.rotation, 0);\r\n sprite.skew.x = float(char.style.skew, 0);\r\n\r\n if (!sprite.parent)\r\n charContainer.addChild(sprite);\r\n }\r\n\r\n if (autoWidth) this.width = maxLineWidth;\r\n if (autoHeight) this.height = yOffset;\r\n };\r\n\r\n //updates the renderChar array and position chars for render\r\n this.prepareForRender = function () {\r\n var pos = new PIXI.Point(),\r\n wordIndex = 0,\r\n lineHeight = 0,\r\n lineFontSize = 0,\r\n lineIndex = 0,\r\n lineAlignment = defaultStyle.align,\r\n lastSpaceIndex = -1,\r\n lastSpaceLineWidth = 0,\r\n textHeight = 0,\r\n forceNewline = false,\r\n style,\r\n renderIndex = 0,\r\n ellipsis = false,\r\n lineFull = false,\r\n i;\r\n\r\n\r\n\r\n\r\n for (i = 0; i < charCount; i++) {\r\n var char = chars[i], lastChar = chars[i - 1];\r\n style = char.style;\r\n\r\n\r\n //lineheight\r\n lineHeight = Math.max(lineHeight, defaultStyle.lineHeight || style.lineHeight || char.data.lineHeight);\r\n\r\n if (style.overflowY !== 'visible' && lineHeight + textHeight > this._height) {\r\n if (style.overflowY === 'hidden')\r\n break;\r\n\r\n }\r\n\r\n if (char.newline)\r\n lineFull = false;\r\n\r\n\r\n //set word index\r\n if (char.space || char.newline) wordIndex++;\r\n else char.wordIndex = wordIndex;\r\n\r\n //textheight\r\n lineFontSize = Math.max(lineFontSize, style.fontSize);\r\n\r\n //lineindex\r\n char.lineIndex = lineIndex;\r\n\r\n //lineAlignment\r\n if (style.align !== defaultStyle.align) lineAlignment = style.align;\r\n\r\n\r\n if (char.space) {\r\n lastSpaceIndex = i;\r\n lastSpaceLineWidth = pos.x;\r\n }\r\n\r\n\r\n var size = Math.round(char.data.width) + float(style.letterSpacing, 0);\r\n if (!autoWidth && !forceNewline && !char.newline && pos.x + size > this._width) {\r\n if (style.wrap) {\r\n if (char.space) {\r\n forceNewline = true;\r\n }\r\n else if (lastSpaceIndex !== -1) {\r\n renderIndex -= i - lastSpaceIndex;\r\n i = lastSpaceIndex - 1;\r\n lastSpaceIndex = -1;\r\n pos.x = lastSpaceLineWidth;\r\n forceNewline = true;\r\n continue;\r\n\r\n }\r\n else if (style.breakWords) {\r\n if (lastChar) {\r\n pos.x -= lastChar.style.letterSpacing;\r\n pos.x -= lastChar.data.width;\r\n }\r\n i -= 2;\r\n renderIndex--;\r\n forceNewline = true;\r\n continue;\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n if (style.overflowX == 'hidden' && !forceNewline) {\r\n lineFull = true;\r\n if (style.ellipsis && !ellipsis) {\r\n ellipsis = true;\r\n var ellipsisData = lineEllipsisData[lineIndex];\r\n if (!ellipsisData) ellipsisData = lineEllipsisData[lineIndex] = [new DynamicChar(), new DynamicChar(), new DynamicChar()];\r\n for (var d = 0; d < 3; d++) {\r\n var dot = ellipsisData[d];\r\n dot.value = \".\";\r\n dot.data = atlas.getCharObject(dot.value, style);\r\n dot.style = style;\r\n dot.x = pos.x + char.data.xOffset;\r\n dot.y = parseFloat(style.verticalAlign) + dot.data.yOffset;\r\n dot.lineIndex = lineIndex;\r\n pos.x += Math.round(dot.data.width) + float(style.letterSpacing, 0);\r\n renderChars[renderIndex] = dot;\r\n renderIndex++;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n //Update position and add to renderchars\r\n if (!lineFull) {\r\n //position\r\n char.x = pos.x + char.data.xOffset;\r\n char.y = parseFloat(style.verticalAlign) + char.data.yOffset;\r\n pos.x += size;\r\n renderChars[renderIndex] = char;\r\n renderIndex++;\r\n }\r\n\r\n\r\n\r\n //new line\r\n if (forceNewline || char.newline || i === charCount - 1) {\r\n if (lastChar) {\r\n pos.x -= lastChar.style.letterSpacing;\r\n if (lastChar.space) pos.x -= lastChar.data.width;\r\n }\r\n\r\n if (char.space) {\r\n pos.x -= char.data.width;\r\n pos.x -= float(style.letterSpacing, 0);\r\n }\r\n\r\n textHeight += lineHeight;\r\n lineHasEllipsis[lineIndex] = ellipsis;\r\n lineWidthData[lineIndex] = pos.x;\r\n lineHeightData[lineIndex] = lineHeight;\r\n lineFontSizeData[lineIndex] = lineFontSize;\r\n lineAlignmentData[lineIndex] = lineAlignment;\r\n\r\n\r\n //reset line vaules\r\n lineHeight = pos.x = lastSpaceLineWidth = lineFontSize = 0;\r\n lineAlignment = defaultStyle.align;\r\n lastSpaceIndex = -1;\r\n lineIndex++;\r\n forceNewline = lineFull = ellipsis = false;\r\n\r\n }\r\n\r\n }\r\n\r\n renderCount = renderIndex;\r\n };\r\n\r\n //phrases the input text and prepares the char array\r\n var closeTags = ['', '', '', '
'];\r\n this.processInputText = function () {\r\n var styleTree = [defaultStyle],\r\n charIndex = 0,\r\n inputTextIndex = 0,\r\n inputArray = Array.from(this._inputText);\r\n\r\n for (var i = 0; i < inputArray.length; i++) {\r\n style = styleTree[styleTree.length - 1];\r\n var c = inputArray[i],\r\n charcode = c.charCodeAt(0),\r\n newline = false,\r\n space = false,\r\n emoji = false;\r\n\r\n\r\n //Extract Tags\r\n if (/(?:\\r\\n|\\r|\\n)/.test(c))\r\n newline = true;\r\n else if (/(\\s)/.test(c))\r\n space = true;\r\n else if (options.allowTags && c === \"<\") {\r\n var tag = this._inputText.substring(inputTextIndex);\r\n tag = tag.slice(0, tag.indexOf(\">\") + 1);\r\n var FoundTag = true;\r\n if (tag.length) {\r\n if (tag === \"\") {\r\n style = style.clone();\r\n style.fontStyle = 'italic';\r\n styleTree.push(style);\r\n }\r\n else if (tag === \"\") {\r\n style = style.clone();\r\n style.fontWeight = 'bold';\r\n styleTree.push(style);\r\n }\r\n else if (tag === \"
\") {\r\n style = style.clone();\r\n style.align = 'center';\r\n styleTree.push(style);\r\n }\r\n else if (closeTags.indexOf(tag) !== -1) {\r\n if (styleTree.length > 1) styleTree.splice(styleTree.length - 1, 1);\r\n }\r\n else if (tag.startsWith(\"\\s]*)(?=\\s|\\/>))(?=[^<]*>)/g,\r\n match = regex.exec(tag);\r\n\r\n if (match !== null) {\r\n style = style.clone();\r\n while (match !== null) {\r\n switch (match[1]) {\r\n case 'family': match[1] = 'fontFamily'; break;\r\n case 'size': match[1] = 'fontSize'; break;\r\n case 'weight': match[1] = 'fontWeight'; break;\r\n case 'style': match[1] = 'fontStyle'; break;\r\n case 'valign': match[1] = 'verticalAlign'; break;\r\n case 'spacing': match[1] = 'letterSpacing'; break;\r\n case 'color': match[1] = 'tint'; break;\r\n\r\n }\r\n style[match[1]] = match[4];\r\n match = regex.exec(tag);\r\n }\r\n styleTree.push(style);\r\n }\r\n }\r\n else {\r\n FoundTag = false;\r\n }\r\n\r\n if (FoundTag) {\r\n inputTextIndex += tag.length;\r\n i += tag.length - 1;\r\n continue;\r\n }\r\n }\r\n }\r\n else {\r\n //detect emoji\r\n var emojiMatch = emojiRegex().exec(c);\r\n if (emojiMatch !== null) {\r\n i--; c = '';\r\n while (emojiMatch !== null && c !== emojiMatch[0]) {\r\n i++;\r\n c = emojiMatch[0];\r\n emojiMatch = emojiRegex().exec(c + inputArray[i + 1]);\r\n }\r\n emoji = true;\r\n }\r\n }\r\n\r\n\r\n //Prepare DynamicChar object\r\n var char = chars[charIndex];\r\n if (!char) {\r\n char = new DynamicChar();\r\n chars[charIndex] = char;\r\n }\r\n char.style = style;\r\n\r\n\r\n if (emoji) {\r\n char.style = char.style.clone();\r\n char.style.fontFamily = DynamicText.settings.defaultEmojiFont;\r\n }\r\n\r\n char.data = atlas.getCharObject(c, char.style);\r\n char.value = c;\r\n char.space = space;\r\n char.newline = newline;\r\n char.emoji = emoji;\r\n\r\n charIndex++;\r\n inputTextIndex += c.length;\r\n }\r\n charCount = charIndex;\r\n };\r\n\r\n //PIXIUI update, lazy update (bad solution needs rewrite when converted to pixi plugin)\r\n this.lazyUpdate = null;\r\n var self = this;\r\n this.update = function () {\r\n if (self.lazyUpdate !== null) return;\r\n self.lazyUpdate = setTimeout(function () {\r\n \r\n console.log(\"UPDATING TEXT\");\r\n var dirtySize = !autoWidth && (self._width != lastWidth || self._height != lastHeight || self.dirtyText);\r\n\r\n if (self.dirtyText || self.dirtyStyle) {\r\n self.dirtyText = self.dirtyStyle = false;\r\n self.dirtyRender = true; //force render after textchange\r\n self.processInputText();\r\n }\r\n\r\n if (dirtySize || self.dirtyRender) {\r\n self.dirtyRender = false;\r\n lastWidth = self._width;\r\n lastHeight = self.height;\r\n self.prepareForRender();\r\n self.render();\r\n }\r\n self.lazyUpdate = null;\r\n }, 0);\r\n\r\n };\r\n}\r\n\r\n\r\nDynamicText.prototype = Object.create(UIBase.prototype);\r\nDynamicText.prototype.constructor = DynamicText;\r\nmodule.exports = DynamicText;\r\nDynamicText.settings = {\r\n debugSpriteSheet: false,\r\n defaultEmojiFont: \"Segoe UI Emoji\" //force one font family for emojis so we dont rerender them multiple times\r\n};\r\n\r\nObject.defineProperties(DynamicText.prototype, {\r\n value: {\r\n get: function () {\r\n return this._inputText;\r\n },\r\n set: function (val) {\r\n if (val !== this._inputText) {\r\n this._inputText = val;\r\n this.dirtyText = true;\r\n this.update();\r\n console.log(\"Updating Text to: \" + val);\r\n }\r\n }\r\n },\r\n text: {\r\n get: function () {\r\n return this.value;\r\n },\r\n set: function (val) {\r\n \r\n this.value = val;\r\n }\r\n },\r\n style: {\r\n get: function () {\r\n return this._style;\r\n },\r\n set: function (val) {\r\n //get a clean default style\r\n var style = new DynamicTextStyle(this);\r\n\r\n //merge it with new style\r\n style.merge(val);\r\n\r\n //merge it onto this default style\r\n this._style.merge(style);\r\n\r\n this.dirtyStyle = true;\r\n this.update();\r\n }\r\n }\r\n});\r\n\r\n\r\n\r\n\r\n\r\n\r\n//Atlas\r\nvar metricsCanvas = document.createElement(\"canvas\");\r\nvar metricsContext = metricsCanvas.getContext(\"2d\");\r\nmetricsCanvas.width = 100;\r\nmetricsCanvas.height = 100;\r\n\r\n\r\nvar DynamicAtlas = function (padding) {\r\n var res = devicePixelRatio || 1,\r\n canvas,\r\n context,\r\n objects,\r\n newObjects = [],\r\n baseTexture,\r\n lazyTimeout,\r\n rootNode,\r\n canvasList = [],\r\n atlasdim,\r\n startdim = 256,\r\n maxdim = 2048;\r\n\r\n\r\n var AtlasNode = function (w, h) {\r\n var children = this.children = [];\r\n this.rect = new PIXI.Rectangle(0, 0, w || 0, h || 0);\r\n this.data = null;\r\n\r\n this.insert = function (width, height, obj) {\r\n if (children.length > 0) {\r\n var newNode = children[0].insert(width, height, obj);\r\n if (newNode !== null) return newNode;\r\n\r\n return children[1].insert(width, height, obj);\r\n } else {\r\n if (this.data !== null) return null;\r\n if (width > this.rect.width || height > this.rect.height) return null;\r\n if (width == this.rect.width && height == this.rect.height) {\r\n this.data = obj;\r\n obj.frame.x = this.rect.x;\r\n obj.frame.y = this.rect.y;\r\n return this;\r\n }\r\n\r\n children.push(new AtlasNode());\r\n children.push(new AtlasNode());\r\n\r\n var dw = this.rect.width - width;\r\n var dh = this.rect.height - height;\r\n\r\n if (dw > dh) {\r\n children[0].rect = new PIXI.Rectangle(this.rect.x, this.rect.y, width, this.rect.height);\r\n children[1].rect = new PIXI.Rectangle(this.rect.x + width, this.rect.y, this.rect.width - width, this.rect.height);\r\n } else {\r\n children[0].rect = new PIXI.Rectangle(this.rect.x, this.rect.y, this.rect.width, height);\r\n children[1].rect = new PIXI.Rectangle(this.rect.x, this.rect.y + height, this.rect.width, this.rect.height - height);\r\n }\r\n\r\n return children[0].insert(width, height, obj);\r\n }\r\n };\r\n };\r\n\r\n var addCanvas = function () {\r\n //create new canvas\r\n canvas = document.createElement(\"canvas\");\r\n context = canvas.getContext(\"2d\");\r\n canvasList.push(canvas);\r\n\r\n //reset dimentions\r\n atlasdim = startdim;\r\n canvas.width = canvas.height = atlasdim;\r\n rootNode = new AtlasNode(atlasdim, atlasdim);\r\n\r\n //reset array with canvas objects and create new atlas\r\n objects = [];\r\n\r\n //set new basetexture\r\n baseTexture = PIXI.BaseTexture.fromCanvas(canvas);\r\n baseTexture.mipmap = false; //if not, pixi bug resizing POW2\r\n baseTexture.resolution = 1; //todo: support all resolutions\r\n baseTexture.update();\r\n\r\n //Debug Spritesheet\r\n if (DynamicText.settings.debugSpriteSheet) {\r\n canvas.className = \"DynamicText_SpriteSheet\";\r\n document.body.appendChild(canvas);\r\n }\r\n\r\n };\r\n\r\n this.fontFamilyCache = {};\r\n\r\n var drawObjects = function (arr, resized) {\r\n if (resized) baseTexture.update();\r\n for (var i = 0; i < arr.length; i++)\r\n drawObject(arr[i]);\r\n };\r\n\r\n var drawObject = function (obj) {\r\n context.drawImage(obj._cache, obj.frame.x, obj.frame.y);\r\n obj.texture.frame = obj.frame;\r\n obj.texture.update();\r\n };\r\n\r\n this.getCharObject = function (char, style) {\r\n var font = style.ctxFont();\r\n\r\n //create new cache for fontFamily\r\n var familyCache = this.fontFamilyCache[font];\r\n if (!familyCache) {\r\n familyCache = {};\r\n this.fontFamilyCache[font] = familyCache;\r\n }\r\n\r\n\r\n\r\n //get char data\r\n var key = style.ctxKey(char);\r\n var obj = familyCache[key];\r\n if (!obj) {\r\n //create char object\r\n var metrics = generateCharData(char, style);\r\n\r\n\r\n\r\n //temp resize if doesnt fit (not nesseary when we dont need to generate textures)\r\n if (metrics.rect) {\r\n if (canvas.width < metrics.rect.width || canvas.height < metrics.rect.height) {\r\n canvas.width = canvas.height = Math.max(metrics.rect.width, metrics.rect.height);\r\n baseTexture.update();\r\n }\r\n }\r\n\r\n\r\n //todo: cleanup when we know whats needed\r\n obj = {\r\n metrics: metrics,\r\n font: font,\r\n value: char,\r\n frame: metrics.rect,\r\n baseTexture: metrics.rect ? baseTexture : null,\r\n xOffset: metrics.bounds ? metrics.bounds.minx : 0,\r\n yOffset: metrics.descent || 0,\r\n width: metrics.width || 0,\r\n lineHeight: metrics.lineHeight || 0,\r\n _cache: metrics.canvas,\r\n texture: metrics.rect ? new PIXI.Texture(baseTexture, metrics.rect) : null //temp texture\r\n };\r\n\r\n //add to collections\r\n familyCache[key] = obj;\r\n\r\n\r\n //add to atlas if visible char\r\n if (metrics.rect) {\r\n newObjects.push(obj);\r\n\r\n\r\n\r\n if (lazyTimeout === undefined)\r\n lazyTimeout = setTimeout(function () {\r\n addNewObjects();\r\n lazyTimeout = undefined;\r\n }, 0);\r\n\r\n }\r\n }\r\n\r\n return obj;\r\n };\r\n\r\n var compareFunction = function (a, b) {\r\n if (a.frame.height < b.frame.height)\r\n return 1;\r\n\r\n if (a.frame.height > b.frame.height)\r\n return -1;\r\n\r\n\r\n if (a.frame.width < b.frame.width)\r\n return 1;\r\n\r\n if (a.frame.width > b.frame.width)\r\n return -1;\r\n\r\n\r\n return 0;\r\n };\r\n\r\n var addNewObjects = function () {\r\n newObjects.sort(compareFunction);\r\n var _resized = false;\r\n var _newcanvas = false;\r\n\r\n for (var i = 0; i < newObjects.length; i++) {\r\n var obj = newObjects[i];\r\n var node = rootNode.insert(obj.frame.width + padding, obj.frame.height + padding, obj);\r\n\r\n if (node !== null) {\r\n if (_newcanvas) obj.texture.baseTexture = baseTexture; //update basetexture if new canvas was created (temp)\r\n objects.push(obj);\r\n continue;\r\n }\r\n\r\n //step one back (so it will be added after resize/new canvas)\r\n i--;\r\n\r\n if (atlasdim < maxdim) {\r\n _resized = true;\r\n resizeCanvas(atlasdim * 2);\r\n continue;\r\n }\r\n\r\n //close current spritesheet and make a new one\r\n drawObjects(objects, _resized);\r\n addCanvas();\r\n _newcanvas = true;\r\n _resized = false;\r\n }\r\n\r\n drawObjects(_resized || _newcanvas ? objects : newObjects, _resized);\r\n newObjects = [];\r\n };\r\n\r\n var resizeCanvas = function (dim) {\r\n canvas.width = canvas.height = atlasdim = dim;\r\n\r\n rootNode = new AtlasNode(dim, dim);\r\n objects.sort(compareFunction);\r\n\r\n for (var i = 0; i < objects.length; i++) {\r\n var obj = objects[i];\r\n rootNode.insert(obj.frame.width + padding, obj.frame.height + padding, obj);\r\n }\r\n };\r\n\r\n var generateCharData = function (char, style) {\r\n\r\n var fontSize = Math.max(1, int(style.fontSize, 26)),\r\n lineHeight = fontSize * 1.25;\r\n\r\n\r\n //Start our returnobject\r\n var data = {\r\n fontSize: fontSize,\r\n lineHeight: lineHeight,\r\n width: 0\r\n };\r\n\r\n //Return if newline\r\n if (!char || /(?:\\r\\n|\\r|\\n)/.test(char))\r\n return data;\r\n\r\n //Ctx font string\r\n var font = style.ctxFont();\r\n metricsContext.font = font;\r\n\r\n //Get char width\r\n data.width = Math.round(metricsContext.measureText(char).width);\r\n\r\n //Return if char = space\r\n if (/(\\s)/.test(char)) return data;\r\n\r\n //set canvas size (with padding so we can messure)\r\n var paddingY = Math.round(fontSize * 0.7), paddingX = Math.max(5, Math.round(fontSize * 0.7));\r\n metricsCanvas.width = Math.ceil(data.width) + paddingX * 2;\r\n metricsCanvas.height = 1.5 * fontSize;\r\n var w = metricsCanvas.width, h = metricsCanvas.height, baseline = (h / 2) + (paddingY * 0.5);\r\n\r\n //set font again after resize\r\n metricsContext.font = font;\r\n\r\n //make sure canvas is clean\r\n metricsContext.clearRect(0, 0, w, h);\r\n\r\n //save clean state with font\r\n metricsContext.save();\r\n\r\n //convert shadow string to shadow data\r\n var shadowData = function (str) {\r\n var data = str.trim().split(' ');\r\n return {\r\n color: string(data[0], \"#000000\"),\r\n alpha: float(data[1], 0.5),\r\n xOffset: float(data[2], 3),\r\n yOffset: float(data[3], 3),\r\n blur: float(data[4], 5)\r\n };\r\n };\r\n\r\n //convert fill string to fill data\r\n var fillData = function (str) {\r\n var data = str.trim().split(' ');\r\n var c = string(data[0], \"#FFFFFF\");\r\n var a = float(data[1], 1);\r\n return {\r\n color: c,\r\n alpha: a,\r\n position: float(data[2], -1),\r\n rgba: hexToRgba(c, a)\r\n };\r\n };\r\n\r\n //create fill style from fill string\r\n var getFillStyle = function (str) {\r\n var fills = str.split(',').filter(function (s) { return s !== ''; }), i;\r\n\r\n //convert to fill data\r\n for (i = 0; i < fills.length; i++) fills[i] = fillData(fills[i]);\r\n\r\n switch (fills.length) {\r\n case 0: return \"white\";\r\n case 1: return fills[0].rgba ? fills[0].rgba : fills[0].color || \"#FFFFFF\";\r\n default:\r\n //make gradient\r\n try {\r\n var gradEnd = baseline + lineHeight - fontSize,\r\n gradient = metricsContext.createLinearGradient(0, gradEnd - fontSize, 0, gradEnd);\r\n\r\n for (i = 0; i < fills.length; i++)\r\n gradient.addColorStop(fills[i].position !== -1 ? fills[i].position : i / (fills.length - 1), fills[i].rgba || fills[i].color);\r\n\r\n return gradient;\r\n }\r\n catch (e) {\r\n return \"#FFFFFF\";\r\n }\r\n }\r\n };\r\n\r\n\r\n //function to draw shadows\r\n var drawShadows = function (shadowString, stroke) {\r\n var shadows = shadowString.trim().split(',').filter(function (s) { return s !== ''; });\r\n if (shadows.length) {\r\n for (var i = 0; i < shadows.length; i++) {\r\n var s = shadowData(shadows[i]);\r\n metricsContext.globalAlpha = s.alpha;\r\n metricsContext.shadowColor = s.color;\r\n metricsContext.shadowOffsetX = s.xOffset + w;\r\n metricsContext.shadowOffsetY = s.yOffset;\r\n metricsContext.shadowBlur = s.blur;\r\n\r\n if (stroke) {\r\n metricsContext.lineWidth = style.stroke;\r\n metricsContext.strokeText(char, paddingX - w, baseline);\r\n }\r\n else metricsContext.fillText(char, paddingX - w, baseline);\r\n }\r\n metricsContext.restore();\r\n }\r\n };\r\n\r\n //draw text shadows\r\n if (style.shadow.length)\r\n drawShadows(style.shadow, false);\r\n\r\n //draw stroke shadows\r\n if (style.stroke && style.strokeShadow.length) {\r\n drawShadows(style.strokeShadow, true);\r\n }\r\n\r\n //draw text\r\n metricsContext.fillStyle = getFillStyle(string(style.fill, \"#000000\"));\r\n metricsContext.fillText(char, paddingX, baseline);\r\n metricsContext.restore();\r\n\r\n //draw stroke\r\n if (style.stroke) {\r\n metricsContext.strokeStyle = getFillStyle(string(style.strokeFill, \"#000000\"));\r\n metricsContext.lineWidth = style.stroke;\r\n metricsContext.strokeText(char, paddingX, baseline);\r\n metricsContext.restore();\r\n }\r\n\r\n\r\n //begin messuring\r\n var pixelData = metricsContext.getImageData(0, 0, w, h).data;\r\n\r\n var i = 3,\r\n line = w * 4,\r\n len = pixelData.length;\r\n\r\n\r\n\r\n //scanline on alpha\r\n while (i < len && !pixelData[i]) { i += 4; }\r\n var ascent = (i / line) | 0;\r\n\r\n\r\n if (i < len) {\r\n //rev scanline on alpha\r\n i = len - 1;\r\n while (i > 0 && !pixelData[i]) { i -= 4; }\r\n var descent = (i / line) | 0;\r\n\r\n\r\n //left to right scanline on alpha\r\n for (i = 3; i < len && !pixelData[i];) {\r\n i += line;\r\n if (i >= len) { i = (i - len) + 4; }\r\n }\r\n var minx = ((i % line) / 4) | 0;\r\n\r\n //right to left scanline on alpha\r\n var step = 1;\r\n for (i = len - 1; i >= 0 && !pixelData[i];) {\r\n i -= line;\r\n if (i < 0) { i = (len - 1) - (step++) * 4; }\r\n }\r\n var maxx = ((i % line) / 4) + 1 | 0;\r\n\r\n\r\n // set font metrics\r\n data.ascent = Math.round(baseline - ascent);\r\n data.descent = Math.round(descent - baseline);\r\n data.height = 1 + Math.round(descent - ascent);\r\n data.bounds = {\r\n minx: minx - paddingX,\r\n maxx: maxx - paddingX,\r\n miny: 0,\r\n maxy: descent - ascent\r\n };\r\n data.rect = {\r\n x: data.bounds.minx,\r\n y: -data.ascent - 2,\r\n width: data.bounds.maxx - data.bounds.minx + 2,\r\n height: data.ascent + data.descent + 4\r\n };\r\n\r\n\r\n //cache (for fast rearrange later)\r\n data.canvas = document.createElement(\"canvas\");\r\n data.canvas.width = data.rect.width;\r\n data.canvas.height = data.rect.height;\r\n var c = data.canvas.getContext(\"2d\");\r\n c.drawImage(metricsCanvas, -paddingX - data.rect.x, -baseline - data.rect.y);\r\n\r\n //reset rect position\r\n data.rect.x = data.rect.y = 0;\r\n\r\n\r\n }\r\n return data;\r\n };\r\n\r\n addCanvas();\r\n};\r\n\r\n\r\n\r\n//helper function for float or default\r\nfunction float(val, def) {\r\n if (isNaN(val)) return def;\r\n return parseFloat(val);\r\n}\r\n\r\n//helper function for int or default\r\nfunction int(val, def) {\r\n if (isNaN(val)) return def;\r\n return parseInt(val);\r\n}\r\n\r\n//helper function for string or default\r\nfunction string(val, def) {\r\n if (typeof val === 'string' && val.length) return val;\r\n return def;\r\n}\r\n\r\n//helper function to convert string hex to int or default\r\nfunction hexToInt(str, def) {\r\n if (typeof str === 'number')\r\n return str;\r\n\r\n var result = parseInt(str.replace('#', '0x'));\r\n\r\n if (isNaN(result)) return def;\r\n return result;\r\n}\r\n\r\n//helper function to convert hex to rgba\r\nfunction hexToRgba(hex, alpha) {\r\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n alpha = float(alpha, 1);\r\n return result ? \"rgba(\" + parseInt(result[1], 16) + \",\" + parseInt(result[2], 16) + \",\" + parseInt(result[3], 16) + \",\" + alpha + \")\" : false;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","function DynamicTextStyle(parent) {\r\n this.respectDirty = true;\r\n this._parent = parent || null;\r\n this._scale = 1;\r\n this._align = 'left';\r\n this._fontFamily = 'Arial';\r\n this._fontSize = 26;\r\n this._fontWeight = 'normal';\r\n this._fontStyle = 'normal';\r\n this._letterSpacing = 0;\r\n this._lineHeight = 0;\r\n this._verticalAlign = 0;\r\n this._rotation = 0;\r\n this._skew = 0;\r\n this._tint = \"#FFFFFF\";\r\n this._fill = '#FFFFFF';\r\n this._shadow = '';\r\n this._stroke = 0;\r\n this._strokeFill = '';\r\n this._strokeShadow = '';\r\n this._wrap = true;\r\n this._breakWords = false;\r\n this._overflowX = 'visible'; //visible|hidden\r\n this._overflowY = 'visible'; //visible|hidden\r\n this._ellipsis = false;\r\n\r\n\r\n var _cachedEllipsisSize = null;\r\n this.ellipsisSize = function (atlas) {\r\n if (!this.ellipsis) return 0;\r\n if (_cachedEllipsisSize === null)\r\n _cachedEllipsisSize = (atlas.getCharObject(\".\", this).width + this.letterSpacing) * 3;\r\n return _cachedEllipsisSize;\r\n };\r\n}\r\n\r\n\r\nDynamicTextStyle.prototype.clone = function () {\r\n var style = new DynamicTextStyle();\r\n style.merge(this);\r\n return style;\r\n};\r\n\r\nDynamicTextStyle.prototype.merge = function (style) {\r\n\r\n if (typeof style === 'object') {\r\n this.respectDirty = false;\r\n for (var param in style) {\r\n var val = style[param];\r\n if (typeof val === 'function' || param === 'respectDirty' || param === '_parent') continue;\r\n this[param] = style[param];\r\n }\r\n this.respectDirty = true;\r\n this._dirty = true;\r\n }\r\n};\r\n\r\nDynamicTextStyle.prototype.ctxKey = function (char) {\r\n return [char, this.fill, this.shadow, this.stroke, this.strokeFill, this.strokeShadow].join('|');\r\n};\r\n\r\nDynamicTextStyle.prototype.ctxFont = function () {\r\n var fontSize = Math.min(200, Math.max(1, this.fontSize || 26)) + \"px \";\r\n var fontWeight = this.fontWeight === \"bold\" ? this.fontWeight + \" \" : \"\";\r\n var fontStyle = this.fontStyle === \"italic\" || this.fontStyle === \"oblique\" ? this.fontStyle + \" \" : \"\";\r\n return fontWeight + fontStyle + fontSize + this.fontFamily;\r\n};\r\n\r\nDynamicTextStyle.prototype.constructor = DynamicTextStyle;\r\nmodule.exports = DynamicTextStyle;\r\n\r\nObject.defineProperties(DynamicTextStyle.prototype, {\r\n _dirty: {\r\n set: function (val) {\r\n if (this.respectDirty) {\r\n if (this._parent !== null) {\r\n this._parent.dirtyStyle = val;\r\n this._parent.update();\r\n }\r\n }\r\n }\r\n },\r\n scale: {\r\n get: function () {\r\n return this._scale;\r\n },\r\n set: function (val) {\r\n if (val !== this._scale) {\r\n this._scale = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n align: {\r\n get: function () {\r\n return this._align;\r\n },\r\n set: function (val) {\r\n if (val !== this._align) {\r\n this._align = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontFamily: {\r\n get: function () {\r\n return this._fontFamily;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontFamily) {\r\n this._fontFamily = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontSize: {\r\n get: function () {\r\n return this._fontSize;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontSize) {\r\n this._fontSize = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontWeight: {\r\n get: function () {\r\n return this._fontWeight;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontWeight) {\r\n this._fontWeight = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fontStyle: {\r\n get: function () {\r\n return this._fontStyle;\r\n },\r\n set: function (val) {\r\n if (val !== this._fontStyle) {\r\n this._fontStyle = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n letterSpacing: {\r\n get: function () {\r\n return this._letterSpacing;\r\n },\r\n set: function (val) {\r\n if (val !== this._letterSpacing) {\r\n this._letterSpacing = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n lineHeight: {\r\n get: function () {\r\n return this._lineHeight;\r\n },\r\n set: function (val) {\r\n if (val !== this._lineHeight) {\r\n this._lineHeight = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n verticalAlign: {\r\n get: function () {\r\n return this._verticalAlign;\r\n },\r\n set: function (val) {\r\n if (val !== this._verticalAlign) {\r\n this._verticalAlign = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n rotation: {\r\n get: function () {\r\n return this._rotation;\r\n },\r\n set: function (val) {\r\n if (val !== this._rotation) {\r\n this._rotation = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n skew: {\r\n get: function () {\r\n return this._skew;\r\n },\r\n set: function (val) {\r\n if (val !== this._skew) {\r\n this._skew = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n tint: {\r\n get: function () {\r\n return this._tint;\r\n },\r\n set: function (val) {\r\n if (val !== this._tint) {\r\n this._tint = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n fill: {\r\n get: function () {\r\n return this._fill;\r\n },\r\n set: function (val) {\r\n if (val !== this._fill) {\r\n this._fill = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n shadow: {\r\n get: function () {\r\n return this._shadow;\r\n },\r\n set: function (val) {\r\n if (val !== this._shadow) {\r\n this._shadow = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n stroke: {\r\n get: function () {\r\n return this._stroke;\r\n },\r\n set: function (val) {\r\n if (val !== this._stroke) {\r\n this._stroke = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n strokeFill: {\r\n get: function () {\r\n return this._strokeFill;\r\n },\r\n set: function (val) {\r\n if (val !== this._strokeFill) {\r\n this._strokeFill = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n strokeShadow: {\r\n get: function () {\r\n return this._strokeShadow;\r\n },\r\n set: function (val) {\r\n if (val !== this._strokeShadow) {\r\n this._strokeShadow = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n wrap: {\r\n get: function () {\r\n return this._wrap;\r\n },\r\n set: function (val) {\r\n if (val !== this._wrap) {\r\n this._wrap = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n breakWords: {\r\n get: function () {\r\n return this._breakWords;\r\n },\r\n set: function (val) {\r\n if (val !== this._breakWords) {\r\n this._breakWords = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n overflowX: {\r\n get: function () {\r\n return this._overflowX;\r\n },\r\n set: function (val) {\r\n if (val !== this._overflowX) {\r\n this._overflowX = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n overflowY: {\r\n get: function () {\r\n return this._overflowY;\r\n },\r\n set: function (val) {\r\n if (val !== this._overflowY) {\r\n this._overflowY = val;\r\n this._dirty = true;\r\n }\r\n }\r\n },\r\n ellipsis: {\r\n get: function () {\r\n return this._ellipsis;\r\n },\r\n set: function (val) {\r\n if (val !== this._ellipsis) {\r\n this._ellipsis = val;\r\n this._dirty = true;\r\n }\r\n }\r\n }\r\n});","var Ease = {},\r\n EaseBase = require('./EaseBase'),\r\n ExponentialEase = require('./ExponentialEase'),\r\n HALF_PI = Math.PI * 0.5;\r\n\r\nfunction create(fn) {\r\n var e = Object.create(EaseBase.prototype);\r\n e.getPosition = fn;\r\n return e;\r\n}\r\n\r\n\r\n//Liear\r\nEase.Linear = new EaseBase();\r\n\r\n//Exponetial Eases\r\nfunction wrapEase(easeInFunction, easeOutFunction, easeInOutFunction) {\r\n return {\r\n easeIn: easeInFunction,\r\n easeOut: easeOutFunction,\r\n easeInOut: easeInOutFunction\r\n };\r\n}\r\n\r\nEase.Power0 = {\r\n \"easeNone\" : Ease.Linear,\r\n};\r\n\r\nEase.Power1 = Ease.Quad = wrapEase(\r\n new ExponentialEase(1, 1, 0),\r\n new ExponentialEase(1, 0, 1),\r\n new ExponentialEase(1, 1, 1));\r\n\r\nEase.Power2 = Ease.Cubic = wrapEase(\r\n new ExponentialEase(2, 1, 0),\r\n new ExponentialEase(2, 0, 1),\r\n new ExponentialEase(2, 1, 1));\r\n\r\nEase.Power3 = Ease.Quart = wrapEase(\r\n new ExponentialEase(3, 1, 0),\r\n new ExponentialEase(3, 0, 1),\r\n new ExponentialEase(3, 1, 1));\r\n\r\nEase.Power4 = Ease.Quint = wrapEase(\r\n new ExponentialEase(4, 1, 0),\r\n new ExponentialEase(4, 0, 1),\r\n new ExponentialEase(4, 1, 1));\r\n\r\n\r\n//Bounce\r\nEase.Bounce = {\r\n \"BounceIn\": create(function (p) {\r\n if ((p = 1 - p) < 1 / 2.75) {\r\n return 1 - (7.5625 * p * p);\r\n } else if (p < 2 / 2.75) {\r\n return 1 - (7.5625 * (p -= 1.5 / 2.75) * p + 0.75);\r\n } else if (p < 2.5 / 2.75) {\r\n return 1 - (7.5625 * (p -= 2.25 / 2.75) * p + 0.9375);\r\n }\r\n return 1 - (7.5625 * (p -= 2.625 / 2.75) * p + 0.984375);\r\n }),\r\n \"BounceOut\": create(function (p) {\r\n if (p < 1 / 2.75) {\r\n return 7.5625 * p * p;\r\n } else if (p < 2 / 2.75) {\r\n return 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\r\n } else if (p < 2.5 / 2.75) {\r\n return 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\r\n }\r\n return 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\r\n }),\r\n \"BounceInOut\": create(function (p) {\r\n var invert = (p < 0.5);\r\n if (invert) {\r\n p = 1 - (p * 2);\r\n } else {\r\n p = (p * 2) - 1;\r\n }\r\n if (p < 1 / 2.75) {\r\n p = 7.5625 * p * p;\r\n } else if (p < 2 / 2.75) {\r\n p = 7.5625 * (p -= 1.5 / 2.75) * p + 0.75;\r\n } else if (p < 2.5 / 2.75) {\r\n p = 7.5625 * (p -= 2.25 / 2.75) * p + 0.9375;\r\n } else {\r\n p = 7.5625 * (p -= 2.625 / 2.75) * p + 0.984375;\r\n }\r\n return invert ? (1 - p) * 0.5 : p * 0.5 + 0.5;\r\n })\r\n};\r\n\r\n//Circ\r\nEase.Circ = {\r\n \"CircIn\": create(function (p) {\r\n return -(Math.sqrt(1 - (p * p)) - 1);\r\n }),\r\n \"CircOut\": create(function (p) {\r\n return Math.sqrt(1 - (p = p - 1) * p);\r\n }),\r\n \"CircInOut\": create(function (p) {\r\n return ((p *= 2) < 1) ? -0.5 * (Math.sqrt(1 - p * p) - 1) : 0.5 * (Math.sqrt(1 - (p -= 2) * p) + 1);\r\n })\r\n};\r\n\r\n\r\n//Expo\r\nEase.Expo = {\r\n \"ExpoIn\": create(function (p) {\r\n return Math.pow(2, 10 * (p - 1)) - 0.001;\r\n }),\r\n \"ExpoOut\": create(function (p) {\r\n return 1 - Math.pow(2, -10 * p);\r\n }),\r\n \"ExpoInOut\": create(function (p) {\r\n return ((p *= 2) < 1) ? 0.5 * Math.pow(2, 10 * (p - 1)) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\r\n })\r\n};\r\n\r\n\r\n//Sine\r\nEase.Sine = {\r\n \"SineIn\": create(function (p) {\r\n return -Math.cos(p * HALF_PI) + 1;\r\n }),\r\n \"SineOut\": create(function (p) {\r\n return Math.sin(p * HALF_PI);\r\n }),\r\n \"SineInOut\": create(function (p) {\r\n return -0.5 * (Math.cos(Math.PI * p) - 1);\r\n })\r\n};\r\n\r\n\r\nmodule.exports = Ease;\r\n\r\n\r\n","function EaseBase() {\r\n this.getPosition = function (p) {\r\n return p;\r\n };\r\n}\r\n\r\nEaseBase.prototype.constructor = EaseBase;\r\nmodule.exports = EaseBase;\r\n\r\n\r\n\r\n","var EaseBase = require('./EaseBase');\r\n\r\nfunction ExponentialEase(power, easeIn, easeOut) {\r\n var pow = power;\r\n var t = easeIn && easeOut ? 3 : easeOut ? 1 : 2;\r\n this.getPosition = function (p) {\r\n var r = (t === 1) ? 1 - p : (t === 2) ? p : (p < 0.5) ? p * 2 : (1 - p) * 2;\n if (pow === 1) {\r\n r *= r;\r\n } else if (pow === 2) {\r\n r *= r * r;\r\n } else if (pow === 3) {\r\n r *= r * r * r;\r\n } else if (pow === 4) {\r\n r *= r * r * r * r;\r\n }\n return (t === 1) ? 1 - r : (t === 2) ? r : (p < 0.5) ? r / 2 : 1 - (r / 2);\r\n };\r\n}\r\n\r\nExponentialEase.prototype = Object.create(EaseBase.prototype);\r\nExponentialEase.prototype.constructor = ExponentialEase;\r\nmodule.exports = ExponentialEase;\r\n\r\n\r\n\r\n","var UIBase = require('./UIBase'),\r\n InputController = require('./Interaction/InputController'),\r\n ClickEvent = require('./Interaction/ClickEvent');\r\n/**\r\n * base object for all Input type objects\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param width {number} passed to uibase\r\n * @param height {number} passed to uibase\r\n * @param tabIndex {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for input\r\n */\r\nfunction InputBase(width, height, tabIndex, tabGroup) {\r\n UIBase.call(this, width, height);\r\n var self = this;\r\n this._focused = false;\r\n this._useTab = this._usePrev = this._useNext = true;\r\n this.container.interactive = true;\r\n InputController.registrer(this, tabIndex, tabGroup);\r\n\r\n\r\n var keyDownEvent = function (e) {\r\n if (e.which === 9) {\r\n if (self._useTab) {\r\n InputController.fireTab();\r\n e.preventDefault();\r\n }\r\n }\r\n else if (e.which === 38) {\r\n if (self._usePrev) {\r\n InputController.firePrev();\r\n e.preventDefault();\r\n }\r\n }\r\n else if (e.which === 40) {\r\n if (self._useNext) {\r\n InputController.fireNext();\r\n e.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n var documentMouseDown = function (e) {\r\n if (!self.__down)\r\n self.blur();\r\n };\r\n\r\n this.container.on(\"pointerdown\", function (e) {\r\n self.focus();\r\n self.__down = true;\r\n });\r\n\r\n this.container.on(\"pointerup\", function (e) {\r\n self.__down = false;\r\n });\r\n\r\n this.container.on(\"pointerupoutside\", function (e) {\r\n self.__down = false;\r\n });\r\n\r\n //var cancelFocusEvent = new ClickEvent(this.stage)\r\n\r\n this._bindEvents = function () {\r\n if (this.stage !== null) {\r\n this.stage.on(\"pointerdown\", documentMouseDown);\r\n document.addEventListener(\"keydown\", keyDownEvent);\r\n }\r\n };\r\n\r\n this._clearEvents = function () {\r\n if (this.stage !== null) {\r\n this.stage.off(\"pointerdown\", documentMouseDown);\r\n document.removeEventListener(\"keydown\", keyDownEvent);\r\n }\r\n };\r\n}\r\n\r\nInputBase.prototype = Object.create(UIBase.prototype);\r\nInputBase.prototype.constructor = InputBase;\r\nmodule.exports = InputBase;\r\n\r\nInputBase.prototype.focus = function () {\r\n if (!this._focused) {\r\n this._focused = true;\r\n this._bindEvents();\r\n InputController.set(this);\r\n this.emit(\"focusChanged\", true);\r\n this.emit(\"focus\");\r\n\r\n }\r\n};\r\n\r\nInputBase.prototype.blur = function () {\r\n if (this._focused) {\r\n InputController.clear();\r\n this._focused = false;\r\n this._clearEvents();\r\n this.emit(\"focusChanged\", false);\r\n this.emit(\"blur\");\r\n\r\n }\r\n};","var ClickEvent = function (obj) {\r\n var bound = false,\r\n self = this,\r\n id = 0,\r\n ishover = false,\r\n mouse = new PIXI.Point(),\r\n offset = new PIXI.Point(),\r\n movementX = 0,\r\n movementY = 0;\r\n \r\n\r\n obj.container.interactive = true;\r\n\r\n var _onMouseDown = function (event) {\r\n mouse.copy(event.data.global);\r\n id = event.data.identifier;\r\n self.onPress.call(obj, event, true);\r\n if (!bound) {\r\n obj.container.on('mouseup', _onMouseUp);\r\n obj.container.on('mouseupoutside', _onMouseUpOutside);\r\n obj.container.on('touchend', _onMouseUp);\r\n obj.container.on('touchendoutside', _onMouseUpOutside);\r\n bound = true;\r\n }\r\n };\r\n\r\n var _mouseUpAll = function (event) {\r\n if (event.data.identifier !== id) return;\r\n offset.set(event.data.global.x - mouse.x, event.data.global.y - mouse.y);\r\n if (bound) {\r\n obj.container.removeListener('mouseup', _onMouseUp);\r\n obj.container.removeListener('mouseupoutside', _onMouseUpOutside);\r\n obj.container.removeListener('touchend', _onMouseUp);\r\n obj.container.removeListener('touchendoutside', _onMouseUpOutside);\r\n bound = false;\r\n }\r\n self.onPress.call(obj, event, false);\r\n };\r\n\r\n var _onMouseUp = function (event) {\r\n if (event.data.identifier !== id) return;\r\n _mouseUpAll(event);\r\n\r\n movementX = Math.abs(offset.x);\r\n movementY = Math.abs(offset.y);\r\n if (Math.max(movementX, movementY) > obj.dragThreshold) return; \r\n\r\n self.onClick.call(obj, event);\r\n };\r\n\r\n var _onMouseUpOutside = function (event) {\r\n if (event.data.identifier !== id) return;\r\n _mouseUpAll(event);\r\n };\r\n\r\n var _onMouseOver = function (event) {\r\n if (!ishover) {\r\n ishover = true;\r\n self.onHover.call(obj, event);\r\n }\r\n };\r\n\r\n var _onMouseOut = function (event) {\r\n if (ishover) {\r\n ishover = false;\r\n self.onLeave.call(obj, event);\r\n }\r\n };\r\n\r\n this.stopEvent = function () {\r\n if (bound) {\r\n obj.container.removeListener('mouseup', _onMouseUp);\r\n obj.container.removeListener('mouseupoutside', _onMouseUpOutside);\r\n obj.container.removeListener('touchend', _onMouseUp);\r\n obj.container.removeListener('touchendoutside', _onMouseUpOutside);\r\n bound = false;\r\n }\r\n obj.container.removeListener('mousedown', _onMouseDown);\r\n obj.container.removeListener('touchstart', _onMouseDown);\r\n obj.container.removeListener('mouseover', _onMouseOver);\r\n obj.container.removeListener('mouseout', _onMouseOut);\r\n };\r\n\r\n this.startEvent = function () {\r\n obj.container.on('mousedown', _onMouseDown);\r\n obj.container.on('touchstart', _onMouseDown);\r\n obj.container.on('mouseover', _onMouseOver);\r\n obj.container.on('mouseout', _onMouseOut);\r\n };\r\n\r\n this.startEvent();\r\n};\r\n\r\nClickEvent.prototype.constructor = ClickEvent;\r\nmodule.exports = ClickEvent;\r\n\r\nClickEvent.prototype.onHover = function (event) { };\r\nClickEvent.prototype.onLeave = function (event) { };\r\nClickEvent.prototype.onPress = function (event, isPressed) { };\r\nClickEvent.prototype.onClick = function (event) { };","var _items = [];\r\nvar DragDropController = {\r\n add: function (item, event) {\r\n item._dragDropEventId = event.data.identifier;\r\n if (_items.indexOf(item) === -1) {\r\n _items.push(item);\r\n return true;\r\n }\r\n return false;\r\n },\r\n getItem: function (object) {\r\n var item = null, index;\r\n for (var i = 0; i < _items.length; i++) {\r\n if (_items[i] === object) {\r\n item = _items[i];\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (item !== null) {\r\n _items.splice(index, 1);\r\n return item;\r\n }\r\n else {\r\n return false;\r\n }\r\n },\r\n getEventItem: function (event, group) {\r\n var item = null, index, id = event.data.identifier;\r\n for (var i = 0; i < _items.length; i++) {\r\n if (_items[i]._dragDropEventId === id) {\r\n if (group !== _items[i].dragGroup) {\r\n return false;\r\n }\r\n item = _items[i];\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (item !== null) {\r\n _items.splice(index, 1);\r\n return item;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n};\r\n\r\nmodule.exports = DragDropController;","var DragEvent = function (obj) {\r\n var bound = false,\r\n start = new PIXI.Point(),\r\n offset = new PIXI.Point(),\r\n mouse = new PIXI.Point(),\r\n movementX = 0,\r\n movementY = 0,\r\n cancel = false,\r\n dragging = false,\r\n self = this,\r\n id = 0;\r\n\r\n obj.container.interactive = true;\r\n\r\n var _onDragStart = function (e) {\r\n id = e.data.identifier;\r\n self.onPress.call(obj, e, true);\r\n if (!bound) {\r\n start.copy(e.data.global);\r\n obj.stage.on('mousemove', _onDragMove);\r\n obj.stage.on('touchmove', _onDragMove);\r\n obj.stage.on('mouseup', _onDragEnd);\r\n obj.stage.on('mouseupoutside', _onDragEnd);\r\n obj.stage.on('touchend', _onDragEnd);\r\n obj.stage.on('touchendoutside', _onDragEnd);\r\n obj.stage.on('touchcancel', _onDragEnd);\r\n bound = true;\r\n }\r\n };\r\n\r\n var _onDragMove = function (event) {\r\n if (event.data.identifier !== id) return;\r\n mouse.copy(event.data.global);\r\n offset.set(mouse.x - start.x, mouse.y - start.y);\r\n if (!dragging) {\r\n movementX = Math.abs(offset.x);\r\n movementY = Math.abs(offset.y);\r\n if (movementX === 0 && movementY === 0 || Math.max(movementX, movementY) < obj.dragThreshold) return; //thresshold\r\n if (obj.dragRestrictAxis !== null) {\r\n cancel = false;\r\n if (obj.dragRestrictAxis == \"x\" && movementY > movementX) cancel = true;\r\n else if (obj.dragRestrictAxis == \"y\" && movementY <= movementX) cancel = true;\r\n if (cancel) {\r\n _onDragEnd(event);\r\n return;\r\n }\r\n }\r\n self.onDragStart.call(obj, event);\r\n dragging = true;\r\n }\r\n self.onDragMove.call(obj, event, offset);\r\n };\r\n\r\n var _onDragEnd = function (event) {\r\n if (event.data.identifier !== id) return;\r\n if (bound) {\r\n obj.stage.removeListener('mousemove', _onDragMove);\r\n obj.stage.removeListener('touchmove', _onDragMove);\r\n obj.stage.removeListener('mouseup', _onDragEnd);\r\n obj.stage.removeListener('mouseupoutside', _onDragEnd);\r\n obj.stage.removeListener('touchend', _onDragEnd);\r\n obj.stage.removeListener('touchendoutside', _onDragEnd);\r\n obj.stage.removeListener('touchcancel', _onDragEnd);\r\n dragging = false;\r\n bound = false;\r\n self.onDragEnd.call(obj, event);\r\n self.onPress.call(obj, event, false);\r\n\r\n }\r\n };\r\n\r\n this.stopEvent = function () {\r\n if (bound) {\r\n obj.stage.removeListener('mousemove', _onDragMove);\r\n obj.stage.removeListener('touchmove', _onDragMove);\r\n obj.stage.removeListener('mouseup', _onDragEnd);\r\n obj.stage.removeListener('mouseupoutside', _onDragEnd);\r\n obj.stage.removeListener('touchend', _onDragEnd);\r\n obj.stage.removeListener('touchendoutside', _onDragEnd);\r\n bound = false;\r\n }\r\n obj.container.removeListener('mousedown', _onDragStart);\r\n obj.container.removeListener('touchstart', _onDragStart);\r\n };\r\n\r\n this.startEvent = function () {\r\n obj.container.on('mousedown', _onDragStart);\r\n obj.container.on('touchstart', _onDragStart);\r\n };\r\n\r\n this.startEvent();\r\n};\r\n\r\nDragEvent.prototype.constructor = DragEvent;\r\nmodule.exports = DragEvent;\r\n\r\nDragEvent.prototype.onPress = function (event, isPressed) { };\r\nDragEvent.prototype.onDragEnd = function (event) { };\r\nDragEvent.prototype.onDragMove = function (event, offset) { };\r\nDragEvent.prototype.onDragStart = function (event) { };","var _currentItem;\r\nvar tabGroups = {};\r\nvar checkGroups = {};\r\nvar checkGroupValues = {};\r\n\r\nvar InputController = {\r\n registrer: function (item, tabIndex, tabGroup) {\r\n var groupName = tabGroup || \"default\";\r\n\r\n var items = tabGroups[groupName];\r\n if (!items)\r\n items = tabGroups[groupName] = [];\r\n\r\n var i = items.indexOf(item);\r\n if (i === -1) {\r\n item._tabIndex = tabIndex !== undefined ? tabIndex : -1;\r\n item._tabGroup = items;\r\n items.push(item);\r\n items.sort(function (a, b) {\r\n if (a._tabIndex < b._tabIndex)\r\n return -1;\r\n if (a._tabIndex > b._tabIndex)\r\n return 1;\r\n return 0;\r\n });\r\n }\r\n },\r\n set: function (item) {\r\n if (_currentItem && typeof _currentItem.blur === \"function\")\r\n _currentItem.blur();\r\n _currentItem = item;\r\n },\r\n clear: function () {\r\n _currentItem = undefined;\r\n },\r\n fireTab: function () {\r\n if (_currentItem) {\r\n var i = _currentItem._tabGroup.indexOf(_currentItem) + 1;\r\n if (i >= _currentItem._tabGroup.length) i = 0;\r\n _currentItem._tabGroup[i].focus();\r\n }\r\n },\r\n fireNext: function () {\r\n if (_currentItem) {\r\n var i = _currentItem._tabGroup.indexOf(_currentItem) + 1;\r\n if (i >= _currentItem._tabGroup.length) i = _currentItem._tabGroup.length - 1;\r\n _currentItem._tabGroup[i].focus();\r\n }\r\n },\r\n firePrev: function () {\r\n if (_currentItem) {\r\n var i = _currentItem._tabGroup.indexOf(_currentItem) - 1;\r\n if (i < 0) i = 0;\r\n _currentItem._tabGroup[i].focus();\r\n }\r\n },\r\n registrerCheckGroup: function (cb) {\r\n var name = cb.checkGroup;\r\n var group = checkGroups[name];\r\n if (!group) group = checkGroups[name] = {};\r\n group[cb.value] = cb;\r\n\r\n if (cb.checked)\r\n checkGroupValues[name] = cb.value;\r\n },\r\n updateCheckGroupSelected: function (cb) {\r\n var group = checkGroups[cb.checkGroup];\r\n for (var val in group) {\r\n var b = group[val];\r\n if (b !== cb)\r\n b.checked = false;\r\n }\r\n checkGroupValues[cb.checkGroup] = cb.value;\r\n },\r\n getCheckGroupSelectedValue: function (name) {\r\n if (checkGroupValues[name])\r\n return checkGroupValues[name];\r\n return \"\";\r\n },\r\n setCheckGroupSelectedValue: function (name, val) {\r\n var group = checkGroups[name];\r\n if (group) {\r\n var cb = group[val];\r\n if (cb) {\r\n cb.checked = true;\r\n }\r\n }\r\n }\r\n};\r\n\r\nmodule.exports = InputController;","var Interaction = {\r\n ClickEvent: require('./ClickEvent'),\r\n DragEvent: require('./DragEvent'),\r\n MouseScrollEvent: require('./MouseScrollEvent')\r\n};\r\n\r\n\r\nmodule.exports = Interaction;","var MouseScrollEvent = function (obj, preventDefault) {\r\n var bound = false, delta = new PIXI.Point(), self = this;\r\n obj.container.interactive = true;\r\n\r\n var _onMouseScroll = function (event) {\r\n if (preventDefault)\r\n event.preventDefault();\r\n\r\n delta.set(event.deltaX, event.deltaY);\r\n self.onMouseScroll.call(obj, event, delta);\r\n };\r\n\r\n var _onHover = function (event) {\r\n if (!bound) {\r\n document.addEventListener(\"mousewheel\", _onMouseScroll, false);\r\n document.addEventListener(\"DOMMouseScroll\", _onMouseScroll, false);\r\n bound = true;\r\n }\r\n };\r\n\r\n var _onMouseOut = function (event) {\r\n if (bound) {\r\n document.removeEventListener(\"mousewheel\", _onMouseScroll);\r\n document.removeEventListener(\"DOMMouseScroll\", _onMouseScroll);\r\n bound = false;\r\n }\r\n };\r\n\r\n this.stopEvent = function () {\r\n if (bound) {\r\n document.removeEventListener(\"mousewheel\", _onMouseScroll);\r\n document.removeEventListener(\"DOMMouseScroll\", _onMouseScroll);\r\n bound = false;\r\n }\r\n obj.container.removeListener('mouseover', _onHover);\r\n obj.container.removeListener('mouseout', _onMouseOut);\r\n };\r\n\r\n this.startEvent = function () {\r\n obj.container.on('mouseover', _onHover);\r\n obj.container.on('mouseout', _onMouseOut);\r\n };\r\n\r\n this.startEvent();\r\n\r\n \r\n};\r\n\r\nMouseScrollEvent.prototype.constructor = MouseScrollEvent;\r\nmodule.exports = MouseScrollEvent;\r\n\r\nMouseScrollEvent.prototype.onMouseScroll = function (event, delta) { };","var MathHelper = {\r\n Lerp: function (start, stop, amt) {\r\n if (amt > 1) amt = 1;\r\n else if (amt < 0) amt = 0;\r\n return start + (stop - start) * amt;\r\n },\r\n Round: function(number, decimals) {\r\n var pow = Math.pow(10, decimals);\r\n return Math.round(number * pow) / pow;\r\n }\r\n};\r\n\r\nmodule.exports = MathHelper;","var Slider = require('./Slider'),\r\n Tween = require('./Tween'),\r\n Ease = require('./Ease/Ease');\r\n\r\n/**\r\n* An UI scrollbar to control a ScrollingContainer\r\n* \r\n* @class\r\n* @extends PIXI.UI.Slider\r\n* @memberof PIXI.UI\r\n* @param options {Object} ScrollBar settings\r\n* @param options.track {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} Any type of UIOBject, will be used for the scrollbar track\r\n* @param options.handle {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as scrollbar handle\r\n* @param options.scrollingContainer {PIXI.UI.ScrollingContainer} The container to control\r\n* @param [options.vertical=false] {boolean} Direction of the scrollbar\r\n* @param [options.autohide=false] {boolean} Hides the scrollbar when not needed\r\n*\r\n*/\r\nfunction ScrollBar(options) {\r\n Slider.call(this, { track: options.track, handle: options.handle, fill: null, vertical: options.vertical });\r\n this.scrollingContainer = options.scrollingContainer;\r\n this.autohide = options.autohide;\r\n this._hidden = false;\r\n\r\n}\r\n\r\nScrollBar.prototype = Object.create(Slider.prototype);\r\nScrollBar.prototype.constructor = ScrollBar;\r\nmodule.exports = ScrollBar;\r\n\r\n\r\nScrollBar.prototype.initialize = function () {\r\n Slider.prototype.initialize.call(this);\r\n this.decimals = 3; //up decimals to trigger ValueChanging more often\r\n\r\n this._onValueChanging = function (val) {\r\n var sizeAmt = this.scrollingContainer._height / this.scrollingContainer.innerContainer.height || 0.001;\r\n if (sizeAmt < 1)\r\n this.scrollingContainer.forcePctPosition(this.vertical ? \"y\" : \"x\", this._amt);\r\n };\r\n\r\n this.scrollingContainer._scrollBars.push(this);\r\n\r\n};\r\n\r\nScrollBar.prototype.alignToContainer = function () {\r\n var newPos,\r\n size,\r\n x_y = this.vertical ? \"y\" : \"x\",\r\n width_height = this.vertical ? \"height\" : \"width\",\r\n top_left = this.vertical ? \"top\" : \"left\",\r\n _posAmt = !this.scrollingContainer.innerContainer[width_height] ? 0 : -(this.scrollingContainer.innerContainer[x_y] / this.scrollingContainer.innerContainer[width_height]),\r\n sizeAmt = !this.scrollingContainer.innerContainer[width_height] ? 1 : this.scrollingContainer[\"_\" + width_height] / this.scrollingContainer.innerContainer[width_height];\r\n\r\n //update amt\r\n this._amt = !this.scrollingContainer[\"_\" + width_height] ? 0 : -(this.scrollingContainer.innerContainer[x_y] / (this.scrollingContainer.innerContainer[width_height] - this.scrollingContainer[\"_\" + width_height]));\r\n\r\n if (sizeAmt >= 1) {\r\n size = this[\"_\" + width_height];\r\n this.handle[top_left] = size * 0.5;\r\n this.toggleHidden(true);\r\n }\r\n else {\r\n size = this[\"_\" + width_height] * sizeAmt;\r\n if (this._amt > 1) size -= (this[\"_\" + width_height] - size) * (this._amt - 1);\r\n else if (this._amt < 0) size -= (this[\"_\" + width_height] - size) * -this._amt;\r\n if (this._amt < 0) newPos = size * 0.5;\r\n else if (this._amt > 1) newPos = this[\"_\" + width_height] - size * 0.5;\r\n else newPos = (_posAmt * this.scrollingContainer[\"_\" + width_height]) + (size * 0.5);\r\n this.handle[top_left] = newPos;\r\n this.toggleHidden(false);\r\n }\r\n this.handle[width_height] = size;\r\n};\r\n\r\n\r\nScrollBar.prototype.toggleHidden = function (hidden) {\r\n if (this.autohide) {\r\n if (hidden && !this._hidden) {\r\n Tween.to(this, 0.2, { alpha: 0 });\r\n this._hidden = true;\r\n }\r\n else if (!hidden && this._hidden) {\r\n Tween.to(this, 0.2, { alpha: 1 });\r\n this._hidden = false;\r\n }\r\n }\r\n};\r\n\r\n\r\n\r\n\r\n","var UIBase = require('./UIBase'),\r\n Container = require('./Container'),\r\n MathHelper = require('./MathHelper'),\r\n Ticker = require('./Ticker'),\r\n DragEvent = require('./Interaction/DragEvent'),\r\n MouseScrollEvent = require('./Interaction/MouseScrollEvent');\r\n\r\n\r\n/**\r\n * An UI Container object with expandMask hidden and possibility to enable scrolling\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param [options.scrollX=false] {Boolean} Enable horizontal scrolling\r\n * @param [options.scrollY=false] {Boolean} Enable vertical scrolling\r\n * @param [options.dragScrolling=true] {Boolean} Enable mousedrag scrolling\r\n * @param [options.softness=0.5] {Number} (0-1) softness of scrolling\r\n * @param [options.width=0] {Number|String} container width \r\n * @param [options.height=0] {Number} container height \r\n * @param [options.radius=0] {Number} corner radius of clipping mask\r\n * @param [options.expandMask=0] {Number} mask expand (px)\r\n * @param [options.overflowY=0] {Number} how much can be scrolled past content dimensions\r\n * @param [options.overflowX=0] {Number} how much can be scrolled past content dimensions\r\n */\r\nfunction ScrollingContainer(options) {\r\n options = options || {};\r\n Container.call(this, options.width, options.height);\r\n this.mask = new PIXI.Graphics();\r\n this.innerContainer = new PIXI.Container();\r\n this.innerBounds = new PIXI.Rectangle();\r\n this.container.addChild(this.mask);\r\n this.container.addChild(this.innerContainer);\r\n this.container.mask = this.mask;\r\n this.scrollX = options.scrollX !== undefined ? options.scrollX : false;\r\n this.scrollY = options.scrollY !== undefined ? options.scrollY : true;\r\n this.dragScrolling = options.dragScrolling !== undefined ? options.dragScrolling : true;\r\n this.softness = options.softness !== undefined ? Math.max(Math.min(options.softness || 0, 1), 0) : 0.5;\r\n this.radius = options.radius || 0;\r\n this.expandMask = options.expandMask || 0;\r\n this.overflowY = options.overflowY || 0;\r\n this.overflowX = options.overflowX || 0;\r\n\r\n this.animating = false;\r\n this.scrolling = false;\r\n this._scrollBars = [];\r\n\r\n this.boundCached = performance.now() - 1000;\r\n}\r\n\r\n\r\nScrollingContainer.prototype = Object.create(Container.prototype);\r\nScrollingContainer.prototype.constructor = ScrollingContainer;\r\nmodule.exports = ScrollingContainer;\r\n\r\n\r\nScrollingContainer.prototype.initialize = function () {\r\n Container.prototype.initialize.apply(this);\r\n if (this.scrollX || this.scrollY) {\r\n this.initScrolling();\r\n }\r\n};\r\n\r\nScrollingContainer.prototype.update = function () {\r\n Container.prototype.update.apply(this);\r\n if (this._lastWidth != this._width || this._lastHeight != this._height) {\r\n var of = this.expandMask;\r\n this.mask.clear();\r\n this.mask.lineStyle(0);\r\n this.mask.beginFill(0xFFFFFF, 1);\r\n if (this.radius === 0) {\r\n\r\n //this.mask.drawRect(0, 0, this._width, this._height);\r\n //this.mask.drawRect(-of, -of, this._width + of, this.height + of);\r\n //this.mask.moveTo(-of, -of);\r\n //this.mask.lineTo(this._width + of, -of);\r\n //this.mask.lineTo(this._width + of, this._height + of);\r\n //this.mask.lineTo(-of, this._height + of);\r\n this.mask.drawRect(-of, -of, this._width + of, this._height + of);\r\n }\r\n else {\r\n this.mask.drawRoundedRect(-of, -of, this._width + of, this.height + of, this.radius);\r\n }\r\n this.mask.endFill();\r\n this._lastWidth = this._width;\r\n this._lastHeight = this._height;\r\n }\r\n\r\n\r\n if (this.setScrollPosition) {\r\n this.setScrollPosition();\r\n }\r\n};\r\n\r\nScrollingContainer.prototype.addChild = function (UIObject) {\r\n var argumentsLength = arguments.length;\r\n if (argumentsLength > 1) {\r\n for (var i = 0; i < argumentsLength; i++) {\r\n this.addChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n Container.prototype.addChild.call(this, UIObject);\r\n this.innerContainer.addChild(UIObject.container);\r\n this.getInnerBounds(true); //make sure bounds is updated instantly when a child is added\r\n }\r\n return UIObject;\r\n};\r\n\r\n\r\nScrollingContainer.prototype.updateScrollBars = function () {\r\n for (var i = 0; i < this._scrollBars.length; i++) {\r\n this._scrollBars[i].alignToContainer();\r\n }\r\n};\r\n\r\n\r\nScrollingContainer.prototype.getInnerBounds = function (force) {\r\n //this is a temporary fix, because we cant rely on innercontainer height if the children is positioned > 0 y.\r\n if (force || performance.now() - this.boundCached > 1000) {\r\n this.innerContainer.getLocalBounds(this.innerBounds);\r\n this.innerContainer.getLocalBounds(this.innerBounds);\r\n this.innerBounds.height = this.innerBounds.y + this.innerContainer.height;\r\n this.innerBounds.width = this.innerBounds.x + this.innerContainer.width;\r\n this.boundCached = performance.now();\r\n }\r\n\r\n return this.innerBounds;\r\n};\r\n\r\nScrollingContainer.prototype.initScrolling = function () {\r\n var container = this.innerContainer,\r\n containerStart = new PIXI.Point(),\r\n targetPosition = new PIXI.Point(),\r\n lastPosition = new PIXI.Point(),\r\n Position = new PIXI.Point(),\r\n Speed = new PIXI.Point(),\r\n stop,\r\n self = this;\r\n\r\n this.forcePctPosition = function (direction, pct) {\r\n var bounds = this.getInnerBounds();\r\n\r\n if (this.scrollX && direction == \"x\") {\r\n container.position[direction] = -((bounds.width - this._width) * pct);\r\n }\r\n if (this.scrollY && direction == \"y\") {\r\n container.position[direction] = -((bounds.height - this._height) * pct);\r\n }\r\n Position[direction] = targetPosition[direction] = container.position[direction];\r\n };\r\n\r\n this.focusPosition = function (pos) {\r\n var bounds = this.getInnerBounds();\r\n\r\n var dif;\r\n if (this.scrollX) {\r\n var x = Math.max(0, (Math.min(bounds.width, pos.x)));\r\n if (x + container.x > this._width) {\r\n dif = x - this._width;\r\n container.x = -dif;\r\n }\r\n else if (x + container.x < 0) {\r\n dif = x + container.x;\r\n container.x -= dif;\r\n }\r\n }\r\n\r\n if (this.scrollY) {\r\n var y = Math.max(0, (Math.min(bounds.height, pos.y)));\r\n\r\n if (y + container.y > this._height) {\r\n dif = y - this._height;\r\n container.y = -dif;\r\n }\r\n else if (y + container.y < 0) {\r\n dif = y + container.y;\r\n container.y -= dif;\r\n }\r\n }\r\n\r\n lastPosition.copy(container.position);\r\n targetPosition.copy(container.position);\r\n Position.copy(container.position);\r\n this.updateScrollBars();\r\n\r\n };\r\n\r\n this.setScrollPosition = function (speed) {\r\n if (speed) {\r\n Speed = speed;\r\n }\r\n\r\n if (!this.animating) {\r\n this.animating = true;\r\n lastPosition.copy(container.position);\r\n targetPosition.copy(container.position);\r\n Ticker.on(\"update\", this.updateScrollPosition, this);\r\n }\r\n };\r\n\r\n this.updateScrollPosition = function (delta) {\r\n stop = true;\r\n if (this.scrollX) this.updateDirection(\"x\", delta);\r\n if (this.scrollY) this.updateDirection(\"y\", delta);\r\n if (stop) {\r\n Ticker.removeListener(\"update\", this.updateScrollPosition);\r\n this.animating = false;\r\n }\r\n };\r\n\r\n\r\n\r\n this.updateDirection = function (direction, delta) {\r\n var bounds = this.getInnerBounds();\r\n\r\n var min;\r\n if (direction == \"y\")\r\n min = Math.round(Math.min(0, this._height - bounds.height));\r\n else\r\n min = Math.round(Math.min(0, this._width - bounds.width));\r\n\r\n if (!this.scrolling && Math.round(Speed[direction]) !== 0) {\r\n targetPosition[direction] += Speed[direction];\r\n Speed[direction] = MathHelper.Lerp(Speed[direction], 0, (5 + 2.5 / Math.max(this.softness, 0.01)) * delta);\r\n\r\n if (targetPosition[direction] > 0) {\r\n targetPosition[direction] = 0;\r\n\r\n }\r\n else if (targetPosition[direction] < min) {\r\n targetPosition[direction] = min;\r\n\r\n }\r\n }\r\n\r\n if (!this.scrolling && Math.round(Speed[direction]) === 0 && (container[direction] > 0 || container[direction] < min)) {\r\n var target = Position[direction] > 0 ? 0 : min;\r\n Position[direction] = MathHelper.Lerp(Position[direction], target, (40 - (30 * this.softness)) * delta);\r\n stop = false;\r\n }\r\n else if (this.scrolling || Math.round(Speed[direction]) !== 0) {\r\n\r\n if (this.scrolling) {\r\n Speed[direction] = Position[direction] - lastPosition[direction];\r\n lastPosition.copy(Position);\r\n }\r\n if (targetPosition[direction] > 0) {\r\n Speed[direction] = 0;\r\n Position[direction] = 100 * this.softness * (1 - Math.exp(targetPosition[direction] / -200));\r\n }\r\n else if (targetPosition[direction] < min) {\r\n Speed[direction] = 0;\r\n Position[direction] = min - (100 * this.softness * (1 - Math.exp((min - targetPosition[direction]) / -200)));\r\n }\r\n else {\r\n Position[direction] = targetPosition[direction];\r\n }\r\n stop = false;\r\n }\r\n\r\n container.position[direction] = Math.round(Position[direction]);\r\n\r\n self.updateScrollBars();\r\n\r\n };\r\n\r\n\r\n //Drag scroll\r\n if (this.dragScrolling) {\r\n var drag = new DragEvent(this);\r\n drag.onDragStart = function (e) {\r\n if (!this.scrolling) {\r\n containerStart.copy(container.position);\r\n Position.copy(container.position);\r\n this.scrolling = true;\r\n this.setScrollPosition();\r\n }\r\n };\r\n\r\n drag.onDragMove = function (e, offset) {\r\n if (this.scrollX)\r\n targetPosition.x = containerStart.x + offset.x;\r\n if (this.scrollY)\r\n targetPosition.y = containerStart.y + offset.y;\r\n };\r\n\r\n drag.onDragEnd = function (e) {\r\n this.scrolling = false;\r\n };\r\n }\r\n\r\n //Mouse scroll\r\n var scrollSpeed = new PIXI.Point();\r\n var scroll = new MouseScrollEvent(this, true);\r\n scroll.onMouseScroll = function (e, delta) {\r\n scrollSpeed.set(-delta.x * 0.2, -delta.y * 0.2);\r\n this.setScrollPosition(scrollSpeed);\r\n };\r\n\r\n\r\n self.updateScrollBars();\r\n\r\n\r\n};\r\n\r\n\r\n\r\n\r\n","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * A sliced sprite with dynamic width and height.\r\n *\r\n * @class\r\n * @memberof PIXI.UI\r\n * @param Texture {PIXI.Texture} the texture for this SliceSprite\r\n * @param BorderWidth {Number} Width of the sprite borders\r\n * @param horizontalSlice {Boolean} Slice the sprite horizontically\r\n * @param verticalSlice {Boolean} Slice the sprite vertically\r\n * @param [tile=false] {Boolean} tile or streach\r\n */\r\nfunction SliceSprite(texture, borderWidth, horizontalSlice, verticalSlice, tile) {\r\n UIBase.call(this, texture.width, texture.height);\r\n\r\n var ftl, ftr, fbl, fbr, ft, fb, fl, fr, ff, stl, str, sbl, sbr, st, sb, sl, sr, sf,\r\n bw = borderWidth || 5,\r\n vs = typeof verticalSlice !== \"undefined\" ? verticalSlice : true,\r\n hs = typeof horizontalSlice !== \"undefined\" ? horizontalSlice : true,\r\n t = texture.baseTexture,\r\n f = texture.frame;\r\n\r\n\r\n if (hs) this.setting.minWidth = borderWidth * 2;\r\n if (vs) this.setting.minHeight = borderWidth * 2;\r\n\r\n this.initialize = function () {\r\n UIBase.prototype.initialize.apply(this);\r\n\r\n //get frames\r\n if (vs && hs) {\r\n ftl = new PIXI.Rectangle(f.x, f.y, bw, bw);\r\n ftr = new PIXI.Rectangle(f.x + f.width - bw, f.y, bw, bw);\r\n fbl = new PIXI.Rectangle(f.x, f.y + f.height - bw, bw, bw);\r\n fbr = new PIXI.Rectangle(f.x + f.width - bw, f.y + f.height - bw, bw, bw);\r\n ft = new PIXI.Rectangle(f.x + bw, f.y, f.width - bw * 2, bw);\r\n fb = new PIXI.Rectangle(f.x + bw, f.y + f.height - bw, f.width - bw * 2, bw);\r\n fl = new PIXI.Rectangle(f.x, f.y + bw, bw, f.height - bw * 2);\r\n fr = new PIXI.Rectangle(f.x + f.width - bw, f.y + bw, bw, f.height - bw * 2);\r\n ff = new PIXI.Rectangle(f.x + bw, f.y + bw, f.width - bw * 2, f.height - bw * 2);\r\n }\r\n else if (hs) {\r\n fl = new PIXI.Rectangle(f.x, f.y, bw, f.height);\r\n fr = new PIXI.Rectangle(f.x + f.width - bw, f.y, bw, f.height);\r\n ff = new PIXI.Rectangle(f.x + bw, f.y, f.width - bw * 2, f.height);\r\n }\r\n else { //vs\r\n ft = new PIXI.Rectangle(f.x, f.y, f.width, bw);\r\n fb = new PIXI.Rectangle(f.x, f.y + f.height - bw, f.width, bw);\r\n ff = new PIXI.Rectangle(f.x, f.y + bw, f.width, f.height - bw * 2);\r\n }\r\n\r\n //TODO: swap frames if rotation\r\n\r\n\r\n\r\n //make sprites\r\n sf = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, ff)) : new PIXI.Sprite(new PIXI.Texture(t, ff));\r\n this.container.addChildAt(sf, 0);\r\n if (vs && hs) {\r\n stl = new PIXI.Sprite(new PIXI.Texture(t, ftl));\r\n str = new PIXI.Sprite(new PIXI.Texture(t, ftr));\r\n sbl = new PIXI.Sprite(new PIXI.Texture(t, fbl));\r\n sbr = new PIXI.Sprite(new PIXI.Texture(t, fbr));\r\n this.container.addChildAt(stl, 0);\r\n this.container.addChildAt(str, 0);\r\n this.container.addChildAt(sbl, 0);\r\n this.container.addChildAt(sbr, 0);\r\n\r\n }\r\n if (hs) {\r\n sl = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, fl)) : new PIXI.Sprite(new PIXI.Texture(t, fl));\r\n sr = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, fr)) : new PIXI.Sprite(new PIXI.Texture(t, fr));\r\n this.container.addChildAt(sl, 0);\r\n this.container.addChildAt(sr, 0);\r\n }\r\n if (vs) {\r\n st = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, ft)) : new PIXI.Sprite(new PIXI.Texture(t, ft));\r\n sb = tile ? new PIXI.extras.TilingSprite(new PIXI.Texture(t, fb)) : new PIXI.Sprite(new PIXI.Texture(t, fb));\r\n this.container.addChildAt(st, 0);\r\n this.container.addChildAt(sb, 0);\r\n }\r\n\r\n //set constant position and sizes\r\n if (vs && hs) st.x = sb.x = sl.y = sr.y = stl.width = str.width = sbl.width = sbr.width = stl.height = str.height = sbl.height = sbr.height = bw;\r\n if (hs) sf.x = sl.width = sr.width = bw;\r\n if (vs) sf.y = st.height = sb.height = bw;\r\n };\r\n\r\n /**\r\n * Updates the sliced sprites position and size\r\n *\r\n * @private\r\n */\r\n this.update = function () {\r\n if (!this.initialized) return;\r\n if (vs && hs) {\r\n str.x = sbr.x = sr.x = this._width - bw;\r\n sbl.y = sbr.y = sb.y = this._height - bw;\r\n sf.width = st.width = sb.width = this._width - bw * 2;\r\n sf.height = sl.height = sr.height = this._height - bw * 2;\r\n }\r\n else if (hs) {\r\n sr.x = this._width - bw;\r\n sl.height = sr.height = sf.height = this._height;\r\n sf.width = this._width - bw * 2;\r\n }\r\n else { //vs\r\n sb.y = this._height - bw;\r\n st.width = sb.width = sf.width = this._width;\r\n sf.height = this._height - bw * 2;\r\n }\r\n\r\n if (this.tint !== null) {\r\n sf.tint = this.tint;\r\n if (vs && hs) stl.tint = str.tint = sbl.tint = sbr.tint = this.tint;\r\n if (hs) sl.tint = sr.tint = this.tint;\r\n if (vs) st.tint = sb.tint = this.tint;\r\n }\r\n\r\n if (this.blendMode !== null) {\r\n sf.blendMode = this.blendMode;\r\n if (vs && hs) stl.blendMode = str.blendMode = sbl.blendMode = sbr.blendMode = this.blendMode;\r\n if (hs) sl.blendMode = sr.blendMode = this.blendMode;\r\n if (vs) st.blendMode = sb.blendMode = this.blendMode;\r\n }\r\n };\r\n}\r\n\r\nSliceSprite.prototype = Object.create(UIBase.prototype);\r\nSliceSprite.prototype.constructor = SliceSprite;\r\nmodule.exports = SliceSprite;\r\n\r\n\r\n\r\n","var UIBase = require('./UIBase'),\r\n DragEvent = require('./Interaction/DragEvent'),\r\n ClickEvent = require('./Interaction/ClickEvent'),\r\n Tween = require('./Tween'),\r\n Ease = require('./Ease/Ease'),\r\n MathHelper = require('./MathHelper');\r\n\r\n/**\r\n* An UI Slider, the default width/height is 90%\r\n* \r\n* @class\r\n* @extends UIBase\r\n* @memberof PIXI.UI\r\n* @param options {Object} Slider settings\r\n* @param options.track {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} Any type of UIOBject, will be used for the slider track\r\n* @param options.handle {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as slider handle\r\n* @param [options.fill=null] {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used for slider fill\r\n* @param [options.vertical=false] {boolean} Direction of the slider\r\n* @param [options.value=0] {number} value of the slider\r\n* @param [options.minValue=0] {number} minimum value\r\n* @param [options.maxValue=100] {number} max value\r\n* @param [options.decimals=0] {boolean} the decimal precision (use negative to round tens and hundreds)\r\n* @param [options.onValueChange=null] {callback} Callback when the value has changed\r\n* @param [options.onValueChanging=null] {callback} Callback while the value is changing\r\n* \r\n* \r\n*/\r\nfunction Slider(options) {\r\n UIBase.call(this);\r\n this._amt = 0;\r\n this._disabled = false;\r\n\r\n //set options\r\n this.track = options.track;\r\n this.handle = options.handle;\r\n this.fill = options.fill || null;\r\n this._minValue = options.minValue || 0;\r\n this._maxValue = options.maxValue || 100;\r\n this.decimals = options.decimals || 0;\r\n this.vertical = options.vertical || false;\r\n this._onValueChange = options.onValueChange || null;\r\n this._onValueChanging = options.onValueChanging || null;\r\n this.value = options.value || 50;\r\n this.handle.pivot = 0.5;\r\n\r\n\r\n\r\n this.addChild(this.track);\r\n if (this.fill) this.track.addChild(this.fill);\r\n this.addChild(this.handle);\r\n this.handle.container.buttonMode = true;\r\n\r\n if (this.vertical) {\r\n this.height = \"100%\";\r\n this.width = this.track.width;\r\n this.track.height = \"100%\";\r\n this.handle.horizontalAlign = \"center\";\r\n if (this.fill) this.fill.horizontalAlign = \"center\";\r\n }\r\n else {\r\n this.width = \"100%\";\r\n this.height = this.track.height;\r\n this.track.width = \"100%\";\r\n this.handle.verticalAlign = \"middle\";\r\n if (this.fill) this.fill.verticalAlign = \"middle\";\r\n }\r\n\r\n}\r\n\r\nSlider.prototype = Object.create(UIBase.prototype);\r\nSlider.prototype.constructor = Slider;\r\nmodule.exports = Slider;\r\n\r\nSlider.prototype.update = function (soft) {\r\n var handleSize, val;\r\n\r\n if (this.vertical) {\r\n handleSize = this.handle._height || this.handle.container.height;\r\n val = ((this._height - handleSize) * this._amt) + (handleSize * 0.5);\r\n if (soft) {\r\n Tween.to(this.handle, 0.3, { top: val }, Ease.Power2.easeOut);\r\n if (this.fill) Tween.to(this.fill, 0.3, { height: val }, Ease.Power2.easeOut);\r\n }\r\n else {\r\n Tween.set(this.handle, { top: val });\r\n if (this.fill) Tween.set(this.fill, { height: val });\r\n }\r\n }\r\n else {\r\n handleSize = this.handle._width || this.handle.container.width;\r\n val = ((this._width - handleSize) * this._amt) + (handleSize * 0.5);\r\n if (soft) {\r\n Tween.to(this.handle, 0.3, { left: val }, Ease.Power2.easeOut);\r\n if (this.fill) Tween.to(this.fill, 0.3, { width: val }, Ease.Power2.easeOut);\r\n }\r\n else {\r\n Tween.set(this.handle, { left: val });\r\n if (this.fill) Tween.set(this.fill, { width: val });\r\n }\r\n }\r\n};\r\n\r\nSlider.prototype.initialize = function () {\r\n UIBase.prototype.initialize.call(this);\r\n\r\n\r\n\r\n var self = this;\r\n var startValue = 0;\r\n\r\n\r\n\r\n ////Handle dragging\r\n var handleDrag = new DragEvent(this.handle);\r\n handleDrag.onPress = function (event, isPressed) {\r\n event.stopPropagation();\r\n };\r\n\r\n handleDrag.onDragStart = function (event) {\r\n startValue = self._amt;\r\n maxPosition = self.vertical ? self._height - self.handle._height : self._width - self.handle._width;\r\n };\r\n\r\n handleDrag.onDragMove = function (event, offset) {\r\n\r\n self._amt = !maxPosition ? 0 : Math.max(0, Math.min(1, startValue + ((self.vertical ? offset.y : offset.x) / maxPosition)));\r\n\r\n triggerValueChanging();\r\n self.update();\r\n };\r\n\r\n handleDrag.onDragEnd = function () {\r\n triggerValueChange();\r\n self.update();\r\n };\r\n\r\n //Bar pressing/dragging\r\n var localMousePosition = new PIXI.Point();\r\n var trackDrag = new DragEvent(this.track);\r\n\r\n trackDrag.onPress = function (event, isPressed) {\r\n if (isPressed)\r\n updatePositionToMouse(event.data.global, true);\r\n event.stopPropagation();\r\n };\r\n\r\n trackDrag.onDragMove = function (event) {\r\n updatePositionToMouse(event.data.global, false);\r\n };\r\n\r\n trackDrag.onDragEnd = function () {\r\n triggerValueChange();\r\n };\r\n\r\n var updatePositionToMouse = function (mousePosition, soft) {\r\n self.track.container.toLocal(mousePosition, null, localMousePosition, true);\r\n\r\n var newPos = self.vertical ? localMousePosition.y - self.handle._height * 0.5 : localMousePosition.x - self.handle._width * 0.5;\r\n var maxPos = self.vertical ? self._height - self.handle._height : self._width - self.handle._width;\r\n self._amt = !maxPos ? 0 : Math.max(0, Math.min(1, newPos / maxPos));\r\n self.update(soft);\r\n triggerValueChanging();\r\n };\r\n\r\n var triggerValueChange = function () {\r\n self.emit(\"change\", self.value);\r\n if (self._lastChange != self.value) {\r\n self._lastChange = self.value;\r\n if (typeof self.onValueChange === \"function\")\r\n self.onValueChange(self.value);\r\n }\r\n };\r\n\r\n var triggerValueChanging = function () {\r\n self.emit(\"changeing\", self.value);\r\n if (self._lastChanging != self.value) {\r\n self._lastChanging = self.value;\r\n if (typeof self._onValueChanging === \"function\")\r\n self._onValueChanging(self.value);\r\n }\r\n };\r\n};\r\n\r\n\r\nObject.defineProperties(Slider.prototype, {\r\n value: {\r\n get: function () {\r\n return MathHelper.Round(MathHelper.Lerp(this._minValue, this._maxValue, this._amt), this.decimals);\r\n },\r\n set: function (val) {\r\n this._amt = (Math.max(this._minValue, Math.min(this._maxValue, val)) - this._minValue) / (this._maxValue - this._minValue);\r\n if (typeof this.onValueChange === \"function\")\r\n self.onValueChange(this.value);\r\n if (typeof this._onValueChanging === \"function\")\r\n this._onValueChanging(this.value);\r\n this.update();\r\n }\r\n },\r\n\r\n onValueChange: {\r\n get: function () {\r\n return this._onValueChange;\r\n },\r\n set: function (val) {\r\n this._onValueChange = val;\r\n }\r\n },\r\n onValueChanging: {\r\n get: function () {\r\n return this._onValueChanging;\r\n },\r\n set: function (val) {\r\n this._onValueChanging = val;\r\n }\r\n },\r\n minValue: {\r\n get: function () {\r\n return this._minValue;\r\n },\r\n set: function (val) {\r\n this._minValue = val;\r\n this.update();\r\n }\r\n },\r\n maxValue: {\r\n get: function () {\r\n return this._maxValue;\r\n },\r\n set: function (val) {\r\n this._maxValue = val;\r\n this.update();\r\n }\r\n },\r\n disabled: {\r\n get: function () {\r\n return this._disabled;\r\n },\r\n set: function (val) {\r\n if (val !== this._disabled) {\r\n this._disabled = val;\r\n this.handle.container.buttonMode = !val;\r\n this.handle.container.interactive = !val;\r\n this.track.container.interactive = !val;\r\n }\r\n }\r\n }\r\n});","var Container = require('./Container');\r\nvar Tween = require('./Tween');\r\n/**\r\n * An UI Container object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param desc {Boolean} Sort the list descending\r\n * @param tweenTime {Number} if above 0 the sort will be animated\r\n * @param tweenEase {PIXI.UI.Ease} ease method used for animation\r\n */\r\nfunction SortableList(desc, tweenTime, tweenEase) {\r\n Container.call(this);\r\n this.desc = typeof desc !== \"undefined\" ? desc : false;\r\n this.tweenTime = tweenTime || 0;\r\n this.tweenEase = tweenEase;\r\n this.items = [];\r\n\r\n}\r\n\r\nSortableList.prototype = Object.create(Container.prototype);\r\nSortableList.prototype.constructor = SortableList;\r\nmodule.exports = SortableList;\r\n\r\nSortableList.prototype.addChild = function (UIObject, fnValue, fnThenBy) {\r\n Container.prototype.addChild.call(this, UIObject);\r\n if (this.items.indexOf(UIObject) == -1) {\r\n this.items.push(UIObject);\r\n }\r\n\r\n if (typeof fnValue === \"function\")\r\n UIObject._sortListValue = fnValue;\r\n\r\n if (typeof fnThenBy === \"function\")\r\n UIObject._sortListThenByValue = fnThenBy;\r\n\r\n if (!UIObject._sortListRnd)\r\n UIObject._sortListRnd = Math.random();\r\n\r\n\r\n\r\n this.sort();\r\n};\r\n\r\nSortableList.prototype.removeChild = function (UIObject) {\r\n if (arguments.length > 1) {\r\n for (var i = 0; i < arguments.length; i++) {\r\n this.removeChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n Container.prototype.removeChild.call(this, UIObject);\r\n var index = this.items.indexOf(UIObject);\r\n if (index != -1) {\r\n this.items.splice(index, 1);\r\n }\r\n this.sort();\r\n }\r\n};\r\n\r\nSortableList.prototype.sort = function (instant) {\r\n clearTimeout(this._sortTimeout);\r\n\r\n if (instant) {\r\n this._sort();\r\n return;\r\n }\r\n\r\n var _this = this;\r\n this._sortTimeout = setTimeout(function () { _this._sort(); }, 0);\r\n};\r\n\r\nSortableList.prototype._sort = function () {\r\n var self = this,\r\n desc = this.desc,\r\n y = 0,\r\n alt = true;\r\n\r\n this.items.sort(function (a, b) {\r\n var res = a._sortListValue() < b._sortListValue() ? desc ? 1 : -1 :\r\n a._sortListValue() > b._sortListValue() ? desc ? -1 : 1 : 0;\r\n\r\n if (res === 0 && a._sortListThenByValue && b._sortListThenByValue) {\r\n res = a._sortListThenByValue() < b._sortListThenByValue() ? desc ? 1 : -1 :\r\n a._sortListThenByValue() > b._sortListThenByValue() ? desc ? -1 : 1 : 0;\r\n }\r\n if (res === 0) {\r\n res = a._sortListRnd > b._sortListRnd ? 1 :\r\n a._sortListRnd < b._sortListRnd ? -1 : 0;\r\n }\r\n return res;\r\n });\r\n\r\n for (var i = 0; i < this.items.length; i++) {\r\n var item = this.items[i];\r\n\r\n alt = !alt;\r\n\r\n if (this.tweenTime > 0) {\r\n Tween.fromTo(item, this.tweenTime, { x: item.x, y: item.y }, { x: 0, y: y }, this.tweenEase);\r\n }\r\n else {\r\n item.x = 0;\r\n item.y = y;\r\n }\r\n y += item.height;\r\n if (typeof item.altering === \"function\")\r\n item.altering(alt);\r\n }\r\n\r\n //force it to update parents when sort animation is done (prevent scrolling container bug)\r\n if (this.tweenTime > 0) {\r\n setTimeout(function () {\r\n self.updatesettings(false, true);\r\n }, this.tweenTime * 1000);\r\n }\r\n};\r\n\r\n\r\n","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * An UI sprite object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param Texture {PIXI.Texture} The texture for the sprite\r\n */\r\nfunction Sprite(t) {\r\n this.sprite = new PIXI.Sprite(t);\r\n UIBase.call(this, this.sprite.width, this.sprite.height);\r\n this.container.addChild(this.sprite);\r\n}\r\n\r\nSprite.prototype = Object.create(UIBase.prototype);\r\nSprite.prototype.constructor = Sprite;\r\nmodule.exports = Sprite;\r\n\r\n\r\nSprite.fromFrame = function (frameId) {\r\n return new Sprite(new PIXI.Texture.fromFrame(frameId));\r\n};\r\n\r\nSprite.fromImage = function (imageUrl) {\r\n return new Sprite(new PIXI.Texture.fromImage(imageUrl));\r\n};\r\n\r\n/**\r\n * Updates the text\r\n *\r\n * @private\r\n */\r\nSprite.prototype.update = function () {\r\n if (this.tint !== null)\r\n this.sprite.tint = this.tint;\r\n\r\n if (this.blendMode !== null)\r\n this.sprite.blendMode = this.blendMode;\r\n\r\n this.sprite.width = this._width;\r\n this.sprite.height = this._height;\r\n};\r\n\r\n","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * A Stage for UIObjects\r\n *\r\n * @class\r\n * @extends PIXI.UI.Container\r\n * @memberof PIXI.UI\r\n * @param width {Number} Width of the Stage\r\n * @param height {Number} Height of the Stage\r\n */\r\nfunction Stage(width, height) {\r\n PIXI.Container.call(this);\r\n this.__width = width;\r\n this.__height = height;\r\n this.minWidth = 0;\r\n this.minHeight = 0;\r\n\r\n this.UIChildren = [];\r\n this.stage = this;\r\n this.interactive = true;\r\n this.hitArea = new PIXI.Rectangle(0, 0, 0, 0);\r\n this.initialized = true;\r\n}\r\n\r\nStage.prototype = Object.create(PIXI.Container.prototype);\r\nStage.prototype.constructor = Stage;\r\nmodule.exports = Stage;\r\n\r\nStage.prototype.addChild = function (UIObject) {\r\n var argumentLenght = arguments.length;\r\n if (argumentLenght > 1) {\r\n for (var i = 0; i < argumentLenght; i++) {\r\n this.addChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n if (UIObject.parent !== null)\r\n UIObject.parent.removeChild(UIObject);\r\n\r\n UIObject.parent = this;\r\n this.UIChildren.push(UIObject);\r\n PIXI.Container.prototype.addChild.call(this, UIObject.container);\r\n UIObject.updatesettings(true);\r\n }\r\n};\r\n\r\nStage.prototype.removeChild = function (UIObject) {\r\n var argumentLenght = arguments.length;\r\n if (argumentLenght > 1) {\r\n for (var i = 0; i < argumentLenght; i++) {\r\n this.removeChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n PIXI.Container.prototype.removeChild.call(this, UIObject.container);\r\n var index = this.UIChildren.indexOf(UIObject);\r\n if (index != -1) {\r\n this.UIChildren.splice(index, 1);\r\n UIObject.parent = null;\r\n }\r\n\r\n }\r\n};\r\n\r\nStage.prototype.resize = function (width, height) {\r\n if (!isNaN(height)) this.__height = height;\r\n if (!isNaN(width)) this.__width = width;\r\n\r\n if (this.minWidth || this.minHeight) {\r\n var rx = 1,\r\n ry = 1;\r\n\r\n if (width && width < this.minWidth) {\r\n rx = this.minWidth / width;\r\n }\r\n\r\n if (height && height < this.minHeight) {\r\n ry = this.minHeight / height;\r\n }\r\n\r\n if (rx > ry && rx > 1) {\r\n this.scale.set(1 / rx);\r\n this.__height *= rx;\r\n this.__width *= rx;\r\n }\r\n else if (ry > 1) {\r\n this.scale.set(1 / ry);\r\n this.__width *= ry;\r\n this.__height *= ry;\r\n }\r\n else if (this.scale.x !== 1) {\r\n this.scale.set(1);\r\n }\r\n }\r\n\r\n this.hitArea.width = this.__width;\r\n this.hitArea.height = this.__height;\r\n\r\n for (var i = 0; i < this.UIChildren.length; i++)\r\n this.UIChildren[i].updatesettings(true, false);\r\n};\r\n\r\nObject.defineProperties(Stage.prototype, {\r\n _width: {\r\n get: function () {\r\n return this.__width;\r\n },\r\n set: function (val) {\r\n if (!isNaN(val)) {\r\n this.__width = val;\r\n this.resize();\r\n }\r\n }\r\n },\r\n _height: {\r\n get: function () {\r\n return this.__height;\r\n },\r\n set: function (val) {\r\n if (!isNaN(val)) {\r\n this.__height = val;\r\n this.resize();\r\n }\r\n }\r\n }\r\n});","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * An UI text object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param Text {String} Text content\r\n * @param TextStyle {PIXI.TextStyle} Style used for the Text\r\n */\r\nfunction Text(text, PIXITextStyle) {\r\n this._text = new PIXI.Text(text, PIXITextStyle);\r\n UIBase.call(this, this._text.width, this._text.height);\r\n this.container.addChild(this._text);\r\n\r\n this.baseupdate = function () {\r\n //force original text width unless using anchors\r\n if (this._anchorLeft === null || this._anchorRight === null) {\r\n this.setting.width = this._text.width;\r\n this.setting.widthPct = null;\r\n }\r\n else {\r\n this._text.width = this._width;\r\n }\r\n\r\n //force original text height unless using anchors\r\n if (this._anchorTop === null || this._anchorBottom === null) {\r\n this.setting.height = this._text.height;\r\n this.setting.heightPct = null;\r\n }\r\n else {\r\n this._text.width = this._width;\r\n }\r\n\r\n\r\n UIBase.prototype.baseupdate.call(this);\r\n };\r\n\r\n this.update = function () {\r\n //set tint\r\n if (this.tint !== null)\r\n this._text.tint = this.tint;\r\n\r\n //set blendmode\r\n if (this.blendMode !== null)\r\n this._text.blendMode = this.blendMode;\r\n };\r\n}\r\n\r\nText.prototype = Object.create(UIBase.prototype);\r\nText.prototype.constructor = Text;\r\nmodule.exports = Text;\r\n\r\n\r\nObject.defineProperties(Text.prototype, {\r\n value: {\r\n get: function () {\r\n return this._text.text;\r\n },\r\n set: function (val) {\r\n this._text.text = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n text: {\r\n get: function () {\r\n return this.value;\r\n },\r\n set: function (val) {\r\n this.value = val;\r\n }\r\n }\r\n});","var InputBase = require('./InputBase'),\r\n Container = require('./Container'),\r\n DragEvent = require('./Interaction/DragEvent');\r\n\r\n/**\r\n * An UI text object\r\n *\r\n * @class\r\n * @extends PIXI.UI.InputBase\r\n * @memberof PIXI.UI\r\n * @param options.value {String} Text content\r\n * @param [options.multiLine=false] {Boolean} Multiline input\r\n * @param options.style {PIXI.TextStyle} Style used for the Text\r\n * @param options.background {(PIXI.UI.SliceSprite|PIXI.UI.Sprite)} will be used as background for input\r\n * @param [options.selectedColor='#ffffff'] {String|Array} Fill color of selected text\r\n * @param [options.selectedBackgroundColor='#318cfa'] {String} BackgroundColor of selected text\r\n * @param [options.width=150] {Number} width of input\r\n * @param [options.height=20] {Number} height of input\r\n * @param [options.padding=3] {Number} input padding\r\n * @param [options.paddingTop=0] {Number} input padding\r\n * @param [options.paddingBottom=0] {Number} input padding\r\n * @param [options.paddingLeft=0] {Number} input padding\r\n * @param [options.paddingRight=0] {Number} input padding\r\n * @param [options.tabIndex=0] {Number} input tab index\r\n * @param [options.tabGroup=0] {Number|String} input tab group\r\n * @param [options.maxLength=0] {Number} 0 = unlimited\r\n * @param [options.caretWidth=1] {Number} width of the caret\r\n * @param [options.lineHeight=0] {Number} 0 = inherit from text\r\n */\r\nfunction TextInput(options) {\r\n //create temp input (for mobile keyboard)\r\n if (typeof _pui_tempInput === \"undefined\") {\r\n _pui_tempInput = document.createElement(\"INPUT\");\r\n _pui_tempInput.setAttribute(\"type\", \"text\");\r\n _pui_tempInput.setAttribute(\"id\", \"_pui_tempInput\");\r\n _pui_tempInput.setAttribute(\"style\", \"position:fixed; left:-10px; top:-10px; width:0px; height: 0px;\");\r\n document.body.appendChild(_pui_tempInput);\r\n }\r\n\r\n\r\n InputBase.call(this, options.width || options.background ? options.background.width : 150, options.height || options.background ? options.background.height : 20, options.tabIndex || 0, options.tabGroup || 0);\r\n this._dirtyText = true;\r\n this.maxLength = options.maxLength || 0;\r\n this._value = this._lastValue = options.value || \"\";\r\n\r\n if (this.maxLength) this._value = this._value.slice(0, this.maxLength);\r\n\r\n var self = this;\r\n var chars = [];\r\n var multiLine = options.multiLine !== undefined ? options.multiLine : false;\r\n var color = options.style && options.style.fill ? options.style.fill : \"#000000\";\r\n var selectedColor = options.selectedColor || \"#ffffff\";\r\n var selectedBackgroundColor = options.selectedBackgroundColor || \"#318cfa\";\r\n var tempText = new PIXI.Text(\"1\", options.style);\r\n var textHeight = tempText.height;\r\n var lineHeight = options.lineHeight || textHeight || self._height;\r\n tempText.destroy();\r\n\r\n\r\n //set cursor\r\n //this.container.cursor = \"text\";\r\n\r\n //selection graphics\r\n var selection = self.selection = new PIXI.Graphics();\r\n selection.visible = false;\r\n selection._startIndex = 0;\r\n selection._endIndex = 0;\r\n\r\n //caret graphics\r\n var caret = self.caret = new PIXI.Graphics();\r\n caret.visible = false;\r\n caret._index = 0;\r\n caret.lineStyle(options.caretWidth || 1, \"#ffffff\", 1);\r\n caret.moveTo(0, 0);\r\n caret.lineTo(0, textHeight);\r\n\r\n\r\n //insert bg\r\n if (options.background) {\r\n this.background = options.background;\r\n this.background.width = \"100%\";\r\n this.background.height = \"100%\";\r\n this.addChild(this.background);\r\n }\r\n\r\n //var padding\r\n var paddingLeft = options.paddingLeft !== undefined ? options.paddingLeft : options.padding !== undefined ? options.padding : 3;\r\n var paddingRight = options.paddingRight !== undefined ? options.paddingRight : options.padding !== undefined ? options.padding : 3;\r\n var paddingBottom = options.paddingBottom !== undefined ? options.paddingBottom : options.padding !== undefined ? options.padding : 3;\r\n var paddingTop = options.paddingTop !== undefined ? options.paddingTop : options.padding !== undefined ? options.padding : 3;\r\n\r\n //insert text container (scrolling container)\r\n var textContainer = this.textContainer = new PIXI.UI.ScrollingContainer({\r\n scrollX: !multiLine,\r\n scrollY: multiLine,\r\n dragScrolling: multiLine,\r\n expandMask: 2,\r\n softness: 0.2,\r\n overflowX: 40,\r\n overflowY: 40\r\n });\r\n textContainer.anchorTop = paddingTop;\r\n textContainer.anchorBottom = paddingBottom;\r\n textContainer.anchorLeft = paddingLeft;\r\n textContainer.anchorRight = paddingRight;\r\n this.addChild(textContainer);\r\n\r\n if (multiLine) {\r\n this._useNext = this._usePrev = false;\r\n textContainer.dragRestrictAxis = \"y\";\r\n textContainer.dragThreshold = 5;\r\n this.dragRestrictAxis = \"x\";\r\n this.dragThreshold = 5;\r\n\r\n }\r\n\r\n\r\n var innerContainer = textContainer.innerContainer;\r\n innerContainer.cacheAsBitmap = true;\r\n //textContainer.container.addChild(innerContainer);\r\n\r\n\r\n this.update = function () {\r\n if (this._width != this._lastWidth) {\r\n this._lastWidth = this._width;\r\n if (multiLine) {\r\n updateText();\r\n if (caret.visible) self.setCaretIndex(caret._index);\r\n if (hasSelection) updateSelectionGraphics();\r\n }\r\n\r\n }\r\n\r\n //update text \r\n if (this._dirtyText) {\r\n updateText();\r\n this._dirtyText = false;\r\n }\r\n };\r\n\r\n //selection Vars\r\n var caretInterval, //interval for flash\r\n si, //startIndex\r\n sie, //startIndexEnd\r\n ei, //endIndex\r\n eie, //endIndexEnd\r\n sp = new PIXI.Point(), //startposition\r\n ds = new PIXI.Point(), //dragStart\r\n de = new PIXI.Point(), //dragend\r\n rdd = false, //Reverse drag direction\r\n vrdd = false, //vertical Reverse drag direction\r\n selectionStart = -1,\r\n selectionEnd = -1,\r\n hasSelection = false,\r\n t = performance.now(), //timestamp\r\n cc = 0, //click counter\r\n textLengthPX = 0,\r\n textHeightPX = 0,\r\n lineIndexMax = 0,\r\n ctrlDown = false,\r\n shiftDown = false,\r\n shiftKey = 16,\r\n ctrlKey = 17,\r\n cmdKey = 91;\r\n\r\n\r\n\r\n var updateText = function () {\r\n textLengthPX = 0;\r\n textHeightPX = 0;\r\n lineIndexMax = 0;\r\n\r\n var lineIndex = 0,\r\n length = self._value.length,\r\n x = 0,\r\n y = (lineHeight - textHeight) * 0.5,\r\n i = 0;\r\n\r\n //destroy excess chars\r\n if (chars.length > length) {\r\n for (i = chars.length - 1; i >= length; i--) {\r\n innerContainer.removeChild(chars[i]);\r\n chars[i].destroy();\r\n }\r\n chars.splice(length, chars.length - length);\r\n }\r\n\r\n //update and add chars\r\n var whitespace = false;\r\n var newline = false;\r\n var wordIndex = 0;\r\n var lastWordIndex = -1;\r\n var wrap = false;\r\n for (i = 0; i < self._value.length; i++) {\r\n if (whitespace || newline) {\r\n lastWordIndex = i;\r\n wordIndex++;\r\n }\r\n\r\n var c = self._value[i];\r\n whitespace = c === \" \";\r\n newline = c === \"\\n\";\r\n\r\n\r\n if (newline) { //newline \"hack\". webgl render errors if \\n is passed to text\r\n c = \"\";\r\n }\r\n\r\n\r\n\r\n var charText = chars[i];\r\n if (!charText) {\r\n charText = new PIXI.Text(c, options.style);\r\n innerContainer.addChild(charText);\r\n chars.push(charText);\r\n }\r\n else {\r\n charText.text = c;\r\n }\r\n\r\n charText.scale.x = newline ? 0 : 1;\r\n charText.wrapped = wrap;\r\n wrap = false;\r\n\r\n if (newline || (multiLine && x + charText.width >= self._width - paddingLeft - paddingRight)) {\r\n lineIndex++;\r\n x = 0;\r\n y += lineHeight;\r\n\r\n if (lastWordIndex != -1 && !newline) {\r\n i = lastWordIndex - 1;\r\n lastWordIndex = -1;\r\n wrap = true;\r\n continue;\r\n }\r\n }\r\n\r\n\r\n charText.lineIndex = lineIndex;\r\n charText.x = x;\r\n charText.y = y;\r\n charText.wordIndex = whitespace || newline ? -1 : wordIndex;\r\n x += charText.width;\r\n\r\n\r\n if (x > textLengthPX)\r\n textLengthPX = x;\r\n if (y > textHeightPX)\r\n textHeightPX = y;\r\n }\r\n\r\n lineIndexMax = lineIndex;\r\n\r\n //put caret on top\r\n innerContainer.addChild(caret);\r\n\r\n //recache\r\n if (innerContainer.cacheAsBitmap) {\r\n innerContainer.cacheAsBitmap = false;\r\n innerContainer.cacheAsBitmap = true;\r\n }\r\n\r\n textContainer.update();\r\n\r\n };\r\n\r\n var updateClosestIndex = function (point, start) {\r\n var currentDistX = 99999;\r\n var currentClosest;\r\n var currentIndex = -1;\r\n var atEnd = false;\r\n\r\n var closestLineIndex = 0;\r\n if (lineIndexMax > 0)\r\n closestLineIndex = Math.max(0, Math.min(lineIndexMax, Math.floor(point.y / lineHeight)));\r\n\r\n\r\n\r\n\r\n\r\n for (var i = 0; i < chars.length; i++) {\r\n var char = chars[i];\r\n if (char.lineIndex != closestLineIndex) continue;\r\n\r\n var distX = Math.abs(point.x - (char.x + (char.width * 0.5)));\r\n if (distX < currentDistX) {\r\n currentDistX = distX;\r\n currentClosest = char;\r\n currentIndex = i;\r\n atEnd = point.x > char.x + (char.width * 0.5);\r\n }\r\n }\r\n\r\n\r\n if (start) {\r\n si = currentIndex;\r\n sie = atEnd;\r\n }\r\n else {\r\n ei = currentIndex;\r\n eie = atEnd;\r\n }\r\n };\r\n\r\n var deleteSelection = function () {\r\n if (hasSelection) {\r\n self.value = self.value.slice(0, selectionStart) + self.value.slice(selectionEnd + 1);\r\n self.setCaretIndex(selectionStart);\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n var updateSelectionColors = function () {\r\n //Color charecters\r\n for (var i = 0; i < chars.length; i++) {\r\n if (i >= selectionStart && i <= selectionEnd)\r\n chars[i].style.fill = selectedColor;\r\n else\r\n chars[i].style.fill = color;\r\n }\r\n };\r\n\r\n var _sp = new PIXI.Point();\r\n var scrollToPosition = function (pos) {\r\n _sp.copy(pos);\r\n if (multiLine && _sp.y >= lineHeight)\r\n _sp.y += lineHeight;\r\n textContainer.focusPosition(_sp);\r\n };\r\n\r\n var resetScrollPosition = function () {\r\n _sp.set(0, 0);\r\n textContainer.focusPosition(_sp);\r\n };\r\n\r\n //caret\r\n var hideCaret = function () {\r\n caret.visible = false;\r\n clearInterval(caretInterval);\r\n };\r\n\r\n var showCaret = function () {\r\n self.clearSelection();\r\n clearInterval(caretInterval);\r\n caret.alpha = 1;\r\n caret.visible = true;\r\n caretInterval = setInterval(function () {\r\n caret.alpha = caret.alpha === 0 ? 1 : 0;\r\n }, 500);\r\n\r\n };\r\n\r\n var insertTextAtCaret = function (c) {\r\n if (hasSelection)\r\n deleteSelection();\r\n if (!self.maxLength || chars.length < self.maxLength) {\r\n\r\n if (caret._atEnd) {\r\n self.value += c;\r\n self.setCaretIndex(chars.length);\r\n }\r\n else {\r\n var index = Math.min(chars.length - 1, caret._index);\r\n self.value = self.value.slice(0, index) + c + self.value.slice(index);\r\n self.setCaretIndex(index + c.length);\r\n }\r\n }\r\n };\r\n\r\n //events\r\n var keyDownEvent = function (e) {\r\n if (e.which === ctrlKey || e.which === cmdKey) ctrlDown = true;\r\n if (e.which === shiftKey) shiftDown = true;\r\n\r\n if (e.which === 13) { //enter\r\n insertTextAtCaret('\\n');\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n if (ctrlDown) {\r\n\r\n //ctrl + ?\r\n if (e.which === 65) { //ctrl + a\r\n self.select();\r\n e.preventDefault();\r\n return;\r\n }\r\n else if (e.which === 90) { //ctrl + z (undo)\r\n if (self.value != self._lastValue)\r\n self.value = self._lastValue;\r\n self.setCaretIndex(self._lastValue.length + 1);\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n }\r\n if (e.which === 8) {\r\n //backspace\r\n if (!deleteSelection()) {\r\n if (caret._index > 0 || (chars.length === 1 && caret._atEnd)) {\r\n if (caret._atEnd) {\r\n self.value = self.value.slice(0, chars.length - 1);\r\n self.setCaretIndex(caret._index);\r\n }\r\n else {\r\n self.value = self.value.slice(0, caret._index - 1) + self.value.slice(caret._index);\r\n self.setCaretIndex(caret._index - 1);\r\n }\r\n }\r\n }\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n if (e.which === 46) {\r\n //delete\r\n if (!deleteSelection()) {\r\n if (!caret._atEnd) {\r\n self.value = self.value.slice(0, caret._index) + self.value.slice(caret._index + 1);\r\n self.setCaretIndex(caret._index);\r\n }\r\n }\r\n e.preventDefault();\r\n return;\r\n }\r\n else if (e.which === 37 || e.which === 39) {\r\n rdd = e.which === 37;\r\n if (shiftDown) {\r\n if (hasSelection) {\r\n var caretAtStart = selectionStart === caret._index;\r\n if (caretAtStart) {\r\n if (selectionStart === selectionEnd && rdd === caret._forward) {\r\n self.setCaretIndex(caret._forward ? caret._index : caret._index + 1);\r\n }\r\n else {\r\n var startindex = rdd ? caret._index - 1 : caret._index + 1;\r\n self.selectRange(startindex, selectionEnd);\r\n caret._index = Math.min(chars.length - 1, Math.max(0, startindex));\r\n }\r\n }\r\n else {\r\n var endIndex = rdd ? caret._index - 1 : caret._index + 1;\r\n self.selectRange(selectionStart, endIndex);\r\n caret._index = Math.min(chars.length - 1, Math.max(0, endIndex));\r\n }\r\n }\r\n else {\r\n var _i = caret._atEnd ? caret._index + 1 : caret._index;\r\n var selectIndex = rdd ? _i - 1 : _i;\r\n self.selectRange(selectIndex, selectIndex);\r\n caret._index = selectIndex;\r\n caret._forward = !rdd;\r\n }\r\n }\r\n else {\r\n //Navigation\r\n if (hasSelection)\r\n self.setCaretIndex(rdd ? selectionStart : selectionEnd + 1);\r\n else\r\n self.setCaretIndex(caret._index + (rdd ? caret._atEnd ? 0 : -1 : 1));\r\n }\r\n e.preventDefault();\r\n return;\r\n\r\n }\r\n else if (multiLine && (e.which === 38 || e.which === 40)) {\r\n vrdd = e.which === 38;\r\n if (shiftDown) {\r\n if (hasSelection) {\r\n de.y = Math.max(0, Math.min(textHeightPX, de.y + (vrdd ? -lineHeight : lineHeight)));\r\n updateClosestIndex(de, false);\r\n console.log(si, ei);\r\n if (Math.abs(si - ei) <= 1) {\r\n console.log(si, ei);\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n } else {\r\n caret._index = (eie ? ei + 1 : ei) + (caret._down ? -1 : 0);\r\n self.selectRange(caret._down ? si : si - 1, caret._index);\r\n }\r\n\r\n }\r\n else {\r\n si = caret._index;\r\n sie = false;\r\n de.copy(caret);\r\n de.y = Math.max(0, Math.min(textHeightPX, de.y + (vrdd ? -lineHeight : lineHeight)));\r\n updateClosestIndex(de, false);\r\n caret._index = (eie ? ei + 1 : ei) - (vrdd ? 0 : 1);\r\n self.selectRange(vrdd ? si - 1 : si, caret._index);\r\n caret._down = !vrdd;\r\n }\r\n }\r\n else {\r\n if (hasSelection) {\r\n self.setCaretIndex(vrdd ? selectionStart : selectionEnd + 1);\r\n }\r\n else {\r\n ds.copy(caret);\r\n ds.y += vrdd ? -lineHeight : lineHeight;\r\n ds.x += 1;\r\n updateClosestIndex(ds, true);\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n }\r\n }\r\n e.preventDefault();\r\n return;\r\n }\r\n };\r\n\r\n var keyUpEvent = function (e) {\r\n if (e.which == ctrlKey || e.which == cmdKey) ctrlDown = false;\r\n if (e.which === shiftKey) shiftDown = false;\r\n };\r\n\r\n var copyEvent = function (e) {\r\n if (hasSelection) {\r\n var clipboardData = e.clipboardData || window.clipboardData;\r\n clipboardData.setData('Text', self.value.slice(selectionStart, selectionEnd + 1));\r\n }\r\n e.preventDefault();\r\n };\r\n\r\n var cutEvent = function (e) {\r\n if (hasSelection) {\r\n copyEvent(e);\r\n deleteSelection();\r\n }\r\n e.preventDefault();\r\n };\r\n\r\n var pasteEvent = function (e) {\r\n var clipboardData = e.clipboardData || window.clipboardData;\r\n insertTextAtCaret(clipboardData.getData('Text'));\r\n e.preventDefault();\r\n };\r\n\r\n var inputEvent = function (e) {\r\n insertTextAtCaret(e.data);\r\n e.preventDefault();\r\n };\r\n\r\n var inputBlurEvent = function (e) {\r\n self.blur();\r\n };\r\n\r\n var event = new DragEvent(this);\r\n\r\n event.onPress = function (e, mouseDown) {\r\n\r\n if (mouseDown) {\r\n var timeSinceLast = performance.now() - t;\r\n t = performance.now();\r\n if (timeSinceLast < 250) {\r\n cc++;\r\n if (cc > 1)\r\n this.select();\r\n else {\r\n innerContainer.toLocal(sp, undefined, ds, true);\r\n updateClosestIndex(ds, true);\r\n var c = chars[si];\r\n if (c) {\r\n if (c.wordIndex != -1)\r\n this.selectWord(c.wordIndex);\r\n else\r\n this.selectRange(si, si);\r\n }\r\n }\r\n }\r\n else {\r\n cc = 0;\r\n sp.copy(e.data.global);\r\n innerContainer.toLocal(sp, undefined, ds, true);\r\n if (chars.length) {\r\n updateClosestIndex(ds, true);\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n }\r\n }\r\n }\r\n e.data.originalEvent.preventDefault();\r\n };\r\n\r\n event.onDragMove = function (e, offset) {\r\n if (!chars.length || !this._focused) return;\r\n\r\n de.x = sp.x + offset.x;\r\n de.y = sp.y + offset.y;\r\n innerContainer.toLocal(de, undefined, de, true);\r\n updateClosestIndex(de, false);\r\n\r\n if (si < ei) {\r\n self.selectRange(sie ? si + 1 : si, eie ? ei : ei - 1);\r\n caret._index = eie ? ei : ei - 1;\r\n }\r\n else if (si > ei) {\r\n self.selectRange(ei, sie ? si : si - 1);\r\n caret._index = ei;\r\n }\r\n else {\r\n if (sie === eie) {\r\n self.setCaretIndex(sie ? si + 1 : si);\r\n }\r\n else {\r\n self.selectRange(si, ei);\r\n caret._index = ei;\r\n }\r\n }\r\n\r\n caret._forward = si <= ei;\r\n caret._down = offset.y > 0;\r\n\r\n scrollToPosition(de);\r\n };\r\n\r\n\r\n\r\n\r\n //public methods\r\n this.focus = function () {\r\n if (!this._focused) {\r\n InputBase.prototype.focus.call(this);\r\n\r\n var l = this.container.worldTransform.tx + \"px\";\r\n var t = this.container.worldTransform.ty + \"px\";\r\n var h = this.container.height + \"px\";\r\n var w = this.container.width + \"px\";\r\n\r\n _pui_tempInput.setAttribute(\"style\", \"position:fixed; left:\" + l + \"; top:\" + t + \"; height:\" + h + \"; width:\" + w + \";\");\r\n _pui_tempInput.value = \"\";\r\n _pui_tempInput.focus();\r\n _pui_tempInput.setAttribute(\"style\", \"position:fixed; left:-10px; top:-10px; width:0px; height: 0px;\");\r\n\r\n innerContainer.cacheAsBitmap = false;\r\n _pui_tempInput.addEventListener(\"blur\", inputBlurEvent, false);\r\n document.addEventListener(\"keydown\", keyDownEvent, false);\r\n document.addEventListener(\"keyup\", keyUpEvent, false);\r\n document.addEventListener('paste', pasteEvent, false);\r\n document.addEventListener('copy', copyEvent, false);\r\n document.addEventListener('cut', cutEvent, false);\r\n _pui_tempInput.addEventListener('textInput', inputEvent, false);\r\n\r\n setTimeout(function () {\r\n if (!caret.visible && !self.selection.visible && !multiLine)\r\n self.setCaretIndex(chars.length);\r\n }, 0);\r\n\r\n }\r\n\r\n };\r\n\r\n this.blur = function () {\r\n if (this._focused) {\r\n InputBase.prototype.blur.call(this);\r\n ctrlDown = false;\r\n shiftDown = false;\r\n hideCaret();\r\n this.clearSelection();\r\n if (chars.length > 1) innerContainer.cacheAsBitmap = true;\r\n _pui_tempInput.removeEventListener(\"blur\", inputBlurEvent);\r\n document.removeEventListener(\"keydown\", keyDownEvent);\r\n document.removeEventListener(\"keyup\", keyUpEvent);\r\n document.removeEventListener('paste', pasteEvent);\r\n document.removeEventListener('copy', copyEvent);\r\n document.removeEventListener('cut', cutEvent);\r\n _pui_tempInput.removeEventListener('textInput', inputEvent);\r\n _pui_tempInput.blur();\r\n\r\n }\r\n\r\n if (!multiLine)\r\n resetScrollPosition();\r\n };\r\n\r\n this.setCaretIndex = function (index) {\r\n caret._atEnd = index >= chars.length;\r\n caret._index = Math.max(0, Math.min(chars.length - 1, index));\r\n\r\n if (chars.length && index > 0) {\r\n\r\n var i = Math.max(0, Math.min(index, chars.length - 1));\r\n var c = chars[i];\r\n\r\n if (c && c.wrapped) {\r\n caret.x = c.x;\r\n caret.y = c.y;\r\n }\r\n else {\r\n i = Math.max(0, Math.min(index - 1, chars.length - 1));\r\n c = chars[i];\r\n caret.x = chars[i].x + chars[i].width;\r\n caret.y = (chars[i].lineIndex * lineHeight) + (lineHeight - textHeight) * 0.5;\r\n }\r\n }\r\n else {\r\n caret.x = 0;\r\n caret.y = (lineHeight - textHeight) * 0.5;\r\n }\r\n\r\n scrollToPosition(caret);\r\n showCaret();\r\n\r\n };\r\n\r\n this.select = function () {\r\n this.selectRange(0, chars.length - 1);\r\n };\r\n\r\n this.selectWord = function (wordIndex) {\r\n var startIndex = chars.length;\r\n var endIndex = 0;\r\n for (var i = 0; i < chars.length; i++) {\r\n if (chars[i].wordIndex !== wordIndex) continue;\r\n if (i < startIndex)\r\n startIndex = i;\r\n if (i > endIndex)\r\n endIndex = i;\r\n }\r\n\r\n this.selectRange(startIndex, endIndex);\r\n };\r\n\r\n var drawSelectionRect = function (x, y, w, h) {\r\n self.selection.beginFill(\"0x\" + selectedBackgroundColor.slice(1), 1);\r\n self.selection.moveTo(x, y);\r\n self.selection.lineTo(x + w, y);\r\n self.selection.lineTo(x + w, y + h);\r\n self.selection.lineTo(x, y + h);\r\n self.selection.endFill();\r\n };\r\n\r\n var updateSelectionGraphics = function () {\r\n var c1 = chars[selectionStart];\r\n if (c1 !== undefined) {\r\n var cx = c1.x,\r\n cy = c1.y,\r\n w = 0,\r\n h = textHeight,\r\n cl = c1.lineIndex;\r\n\r\n self.selection.clear();\r\n for (var i = selectionStart; i <= selectionEnd; i++) {\r\n var c = chars[i];\r\n if (c.lineIndex != cl) {\r\n drawSelectionRect(cx, cy, w, h);\r\n cx = c.x;\r\n cy = c.y;\r\n cl = c.lineIndex;\r\n w = 0;\r\n }\r\n w += c.width;\r\n }\r\n drawSelectionRect(cx, cy, w, h);\r\n innerContainer.addChildAt(self.selection, 0);\r\n }\r\n };\r\n\r\n this.selectRange = function (startIndex, endIndex) {\r\n if (startIndex > -1 && endIndex > -1) {\r\n var start = Math.min(startIndex, endIndex, chars.length - 1);\r\n var end = Math.min(Math.max(startIndex, endIndex), chars.length - 1);\r\n if (start != selectionStart || end != selectionEnd) {\r\n hasSelection = true;\r\n this.selection.visible = true;\r\n selectionStart = start;\r\n selectionEnd = end;\r\n hideCaret();\r\n updateSelectionGraphics();\r\n updateSelectionColors();\r\n }\r\n this.focus();\r\n }\r\n else {\r\n self.clearSelection();\r\n }\r\n };\r\n\r\n this.clearSelection = function () {\r\n if (hasSelection) {\r\n //remove color\r\n hasSelection = false;\r\n this.selection.visible = false;\r\n selectionStart = -1;\r\n selectionEnd = -1;\r\n updateSelectionColors();\r\n }\r\n };\r\n}\r\n\r\nTextInput.prototype = Object.create(InputBase.prototype);\r\nTextInput.prototype.constructor = TextInput;\r\nmodule.exports = TextInput;\r\n\r\nObject.defineProperties(TextInput.prototype, {\r\n value: {\r\n get: function () {\r\n return this._value;\r\n },\r\n set: function (val) {\r\n if (this.maxLength)\r\n val = val.slice(0, this.maxLength);\r\n\r\n if (this._value != val) {\r\n this._lastValue = this._value;\r\n this._value = val;\r\n this._dirtyText = true;\r\n this.update();\r\n this.emit(\"change\");\r\n\r\n }\r\n }\r\n },\r\n text: {\r\n get: function () {\r\n return this.value;\r\n },\r\n set: function (val) {\r\n this.value = val;\r\n }\r\n }\r\n});\r\n\r\n\r\n/*\r\n * Features:\r\n * multiLine, shift selection, Mouse Selection, Cut, Copy, Paste, Delete, Backspace, Arrow navigation, tabIndex\r\n * \r\n * Methods:\r\n * blur()\r\n * focus()\r\n * select() - selects all text\r\n * selectRange(startIndex, endIndex)\r\n * clearSelection() \r\n * setCaretIndex(index) moves caret to index\r\n * \r\n * \r\n * Events:\r\n * \"change\"\r\n * \"blur\"\r\n * \"blur\"\r\n * \"focus\"\r\n * \"focusChanged\" param: [bool]focus\r\n * \r\n * \r\n */","var Tween = require('./Tween');\r\n\r\nfunction Ticker(autoStart) {\r\n PIXI.utils.EventEmitter.call(this);\r\n this._disabled = true;\r\n this._now = 0;\r\n\r\n this.DeltaTime = 0;\r\n this.Time = performance.now();\r\n this.Ms = 0;\r\n if (autoStart) {\r\n this.disabled = false;\r\n }\r\n Ticker.shared = this;\r\n}\r\n\r\nTicker.prototype = Object.create(PIXI.utils.EventEmitter.prototype);\r\nTicker.prototype.constructor = Ticker;\r\n\r\nmodule.exports = Ticker;\r\n\r\n\r\n\r\nObject.defineProperties(Ticker.prototype, {\r\n disabled: {\r\n get: function () {\r\n return this._disabled;\r\n },\r\n set: function (val) {\r\n if (!this._disabled) {\r\n this._disabled = true;\r\n }\r\n else {\r\n this._disabled = false;\r\n Ticker.shared = this;\r\n this.update(performance.now(), true);\r\n }\r\n }\r\n },\r\n});\r\n\r\n\r\n\r\n/**\r\n * Updates the text\r\n *\r\n * @private\r\n */\r\nTicker.prototype.update = function (time) {\r\n Ticker.shared._now = time;\r\n Ticker.shared.Ms = Ticker.shared._now - Ticker.shared.Time;\r\n Ticker.shared.Time = Ticker.shared._now;\r\n Ticker.shared.DeltaTime = Ticker.shared.Ms * 0.001;\r\n Ticker.shared.emit(\"update\", Ticker.shared.DeltaTime);\r\n Tween._update(Ticker.shared.DeltaTime);\r\n if (!Ticker.shared._disabled)\r\n requestAnimationFrame(Ticker.shared.update);\r\n};\r\n\r\n\r\n\r\n\r\nTicker.on = function (event, fn, context) {\r\n Ticker.prototype.on.apply(this.shared, arguments);\r\n};\r\n\r\nTicker.once = function (event, fn, context) {\r\n Ticker.prototype.once.apply(this.shared, arguments);\r\n};\r\n\r\nTicker.removeListener = function (event, fn) {\r\n Ticker.prototype.removeListener.apply(this.shared, arguments);\r\n};\r\n\r\n\r\nTicker.shared = new Ticker(true);","var UIBase = require('./UIBase');\r\n\r\n/**\r\n * An UI sprite object\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @memberof PIXI.UI\r\n * @param Texture {PIXI.Texture} The texture for the sprite\r\n * @param [Width=Texture.width] {number} Width of tilingsprite\r\n * @param [Height=Texture.height] {number} Height of tiling sprite\r\n */\r\nfunction TilingSprite(t, width, height) {\r\n this.sprite = new PIXI.extras.TilingSprite(t);\r\n UIBase.call(this, width || this.sprite.width, height || this.sprite.height);\r\n this.container.addChild(this.sprite);\r\n}\r\n\r\nTilingSprite.prototype = Object.create(UIBase.prototype);\r\nTilingSprite.prototype.constructor = TilingSprite;\r\nmodule.exports = TilingSprite;\r\n\r\n/**\r\n * Updates the text\r\n *\r\n * @private\r\n */\r\nTilingSprite.prototype.update = function () {\r\n if (this.tint !== null)\r\n this.sprite.tint = this.tint;\r\n\r\n if (this.blendMode !== null)\r\n this.sprite.blendMode = this.blendMode;\r\n\r\n this.sprite.width = this._width;\r\n this.sprite.height = this._height;\r\n};\r\n\r\nObject.defineProperties(TilingSprite.prototype, {\r\n tilePosition: {\r\n get: function () {\r\n return this.sprite.tilePosition;\r\n },\r\n set: function (val) {\r\n this.sprite.tilePosition = val;\r\n }\r\n },\r\n tileScale: {\r\n get: function () {\r\n return this.sprite.tileScale;\r\n },\r\n set: function (val) {\r\n this.sprite.tileScale = val;\r\n }\r\n }\r\n});","var MathHelper = require('./MathHelper');\r\nvar Ease = require('./Ease/Ease');\r\nvar _tweenItemCache = [];\r\nvar _callbackItemCache = [];\r\nvar _tweenObjects = {};\r\nvar _activeTweenObjects = {};\r\nvar _currentId = 0;\r\n\r\nvar TweenObject = function (object) {\r\n this.object = object;\r\n this.tweens = {};\r\n this.active = false;\r\n};\r\n\r\nvar CallbackItem = function () {\r\n this._ready = false;\r\n this.obj = null;\r\n this.parent = null;\r\n this.key = \"\";\r\n this.time = 0;\r\n this.callback = null;\r\n this.currentTime = 0;\r\n};\r\n\r\nCallbackItem.prototype.set = function (obj, callback, time) {\r\n\r\n\r\n this.obj = obj.object;\r\n\r\n if (!this.obj._currentCallbackID)\r\n this.obj._currentCallbackID = 1;\r\n else\r\n this.obj._currentCallbackID++;\r\n\r\n this.time = time;\r\n this.parent = obj;\r\n this.callback = callback;\r\n this._ready = false;\r\n this.key = \"cb_\" + this.obj._currentCallbackID;\r\n this.currentTime = 0;\r\n if (!this.parent.active) {\r\n this.parent.active = true;\r\n _activeTweenObjects[this.obj._tweenObjectId] = this.parent;\r\n }\r\n};\r\n\r\nCallbackItem.prototype.update = function (delta) {\r\n this.currentTime += delta;\r\n if (this.currentTime >= this.time) {\r\n this._ready = true;\r\n delete this.parent.tweens[this.key];\r\n if (!Object.keys(this.parent.tweens).length) {\r\n this.parent.active = false;\r\n delete _activeTweenObjects[this.obj._tweenObjectId];\r\n }\r\n this.callback();\r\n }\r\n};\r\n\r\nvar TweenItem = function () {\r\n this._ready = false;\r\n this.parent = null;\r\n this.obj = null;\r\n this.key = \"\";\r\n this.from = 0;\r\n this.to = 0;\r\n this.time = 0;\r\n this.ease = 0;\r\n this.currentTime = 0;\r\n this.t = 0;\r\n};\r\n\r\n\r\nTweenItem.prototype.set = function (obj, key, from, to, time, ease) {\r\n this.parent = obj;\r\n this.obj = obj.object;\r\n this.key = key;\r\n this.surfix = getSurfix(to);\r\n this.to = getToValue(to);\r\n this.from = getFromValue(from, to, this.obj, key);\r\n this.time = time;\r\n this.currentTime = 0;\r\n this.ease = ease;\r\n this._ready = false;\r\n\r\n if (!this.parent.active) {\r\n this.parent.active = true;\r\n _activeTweenObjects[this.obj._tweenObjectId] = this.parent;\r\n }\r\n\r\n};\r\n\r\nTweenItem.prototype.update = function (delta) {\r\n this.currentTime += delta;\r\n this.t = Math.min(this.currentTime, this.time) / this.time;\r\n if (this.ease)\r\n this.t = this.ease.getPosition(this.t);\r\n\r\n var val = MathHelper.Lerp(this.from, this.to, this.t);\r\n this.obj[this.key] = this.surfix ? val + this.surfix : val;\r\n\r\n if (this.currentTime >= this.time) {\r\n this._ready = true;\r\n delete this.parent.tweens[this.key];\r\n if (!Object.keys(this.parent.tweens).length) {\r\n this.parent.active = false;\r\n delete _activeTweenObjects[this.obj._tweenObjectId];\r\n }\r\n }\r\n};\r\n\r\n\r\n\r\nvar widthKeys = [\"width\", \"minWidth\", \"maxWidth\", \"anchorLeft\", \"anchorRight\", \"left\", \"right\", \"x\"];\r\nvar heightKeys = [\"height\", \"minHeight\", \"maxHeight\", \"anchorTop\", \"anchorBottom\", \"top\", \"bottom\", \"y\"];\r\n\r\n\r\nfunction getFromValue(from, to, obj, key) {\r\n //both number\r\n if (!isNaN(from) && !isNaN(to))\r\n return from;\r\n\r\n //both percentage\r\n if (isNaN(from) && isNaN(to) && from.indexOf('%') !== -1 && to.indexOf('%') !== -1)\r\n return parseFloat(from.replace('%', ''));\r\n\r\n //convert from to px\r\n if (isNaN(from) && !isNaN(to) && from.indexOf('%') !== -1) {\r\n if (widthKeys.indexOf(key) !== -1)\r\n return obj.parent._width * (parseFloat(from.replace('%', '')) * 0.01);\r\n else if (heightKeys.indexOf(key) !== -1)\r\n return obj.parent._height * (parseFloat(from.replace('%', '')) * 0.01);\r\n else\r\n return 0;\r\n }\r\n\r\n //convert from to percentage\r\n if (!isNaN(from) && isNaN(to) && to.indexOf('%') !== -1) {\r\n if (widthKeys.indexOf(key) !== -1)\r\n return from / obj.parent._width * 100;\r\n else if (heightKeys.indexOf(key) !== -1)\r\n return from / obj.parent._height * 100;\r\n else\r\n return 0;\r\n }\r\n return 0;\r\n}\r\n\r\nfunction getSurfix(to) {\r\n if (isNaN(to) && to.indexOf('%') !== -1)\r\n return \"%\";\r\n}\r\n\r\nfunction getToValue(to) {\r\n if (!isNaN(to))\r\n return to;\r\n if (isNaN(to) && to.indexOf('%') !== -1)\r\n return parseFloat(to.replace('%', ''));\r\n}\r\n\r\n\r\nfunction getObject(obj) {\r\n if (!obj._tweenObjectId) {\r\n obj._tweenObjectId = _currentId;\r\n _currentId++;\r\n }\r\n var object = _tweenObjects[obj._tweenObjectId];\r\n if (!object) {\r\n object = _tweenObjects[obj._tweenObjectId] = new TweenObject(obj);\r\n }\r\n return object;\r\n}\r\n\r\nfunction getTweenItem() {\r\n for (var i = 0; i < _tweenItemCache.length; i++) {\r\n if (_tweenItemCache[i]._ready)\r\n return _tweenItemCache[i];\r\n }\r\n\r\n var tween = new TweenItem();\r\n _tweenItemCache.push(tween);\r\n return tween;\r\n}\r\n\r\nfunction getCallbackItem() {\r\n for (var i = 0; i < _callbackItemCache.length; i++) {\r\n if (_callbackItemCache[i]._ready)\r\n return _callbackItemCache[i];\r\n }\r\n\r\n var cb = new CallbackItem();\r\n _callbackItemCache.push(cb);\r\n return cb;\r\n}\r\n\r\nvar Tween = {\r\n to: function (obj, time, params, ease) {\r\n var object = getObject(obj);\r\n for (var key in params) {\r\n if (key === \"onComplete\") {\r\n var cb = getCallbackItem();\r\n cb.set(object, params[key], time);\r\n object.tweens[cb.key] = cb;\r\n continue;\r\n }\r\n\r\n if (time) {\r\n if (params[key] == obj[key] || typeof obj[key] === \"undefined\") continue;\r\n if (!object.tweens[key])\r\n object.tweens[key] = getTweenItem();\r\n object.tweens[key].set(object, key, obj[key], params[key], time, ease);\r\n }\r\n }\r\n if (!time) this.set(obj, params);\r\n },\r\n from: function (obj, time, params, ease) {\r\n var object = getObject(obj);\r\n for (var key in params) {\r\n if (key === \"onComplete\") {\r\n var cb = getCallbackItem();\r\n cb.set(object, params[key], time);\r\n object.tweens[cb.key] = cb;\r\n continue;\r\n }\r\n\r\n if (time) {\r\n if (params[key] == obj[key] || typeof obj[key] === \"undefined\") continue;\r\n if (!object.tweens[key])\r\n object.tweens[key] = getTweenItem();\r\n object.tweens[key].set(object, key, params[key], obj[key], time, ease);\r\n }\r\n }\r\n if (!time) this.set(obj, params);\r\n },\r\n fromTo: function (obj, time, paramsFrom, paramsTo, ease) {\r\n var object = getObject(obj);\r\n for (var key in paramsTo) {\r\n if (key === \"onComplete\") {\r\n var cb = getCallbackItem();\r\n cb.set(object, paramsTo[key], time);\r\n object.tweens[cb.key] = cb;\r\n continue;\r\n }\r\n if (time) {\r\n if (paramsFrom[key] == paramsTo[key] || typeof obj[key] === \"undefined\" || typeof paramsFrom[key] === \"undefined\") continue;\r\n if (!object.tweens[key]) {\r\n object.tweens[key] = getTweenItem();\r\n }\r\n object.tweens[key].set(object, key, paramsFrom[key], paramsTo[key], time, ease);\r\n }\r\n }\r\n if (!time) this.set(obj, paramsTo);\r\n },\r\n set: function (obj, params) {\r\n var object = getObject(obj);\r\n for (var key in params) {\r\n if (params[key] == obj[key] || typeof obj[key] === \"undefined\") continue;\r\n if (object.tweens[key]) delete object.tweens[key];\r\n obj[key] = params[key];\r\n }\r\n },\r\n _update: function (delta) {\r\n for (var id in _activeTweenObjects) {\r\n var object = _activeTweenObjects[id];\r\n for (var key in object.tweens) {\r\n object.tweens[key].update(delta);\r\n }\r\n }\r\n }\r\n};\r\n\r\n\r\nmodule.exports = Tween;","var UI = {\r\n Stage: require('./Stage'),\r\n Container: require('./Container'),\r\n ScrollingContainer: require('./ScrollingContainer'),\r\n SortableList: require('./SortableList'),\r\n Sprite: require('./Sprite'),\r\n TilingSprite: require('./TilingSprite'),\r\n SliceSprite: require('./SliceSprite'),\r\n Slider: require('./Slider'),\r\n ScrollBar: require('./ScrollBar'),\r\n Text: require('./Text'),\r\n DynamicText: require('./DynamicText/DynamicText'),\r\n DynamicTextStyle: require('./DynamicText/DynamicTextStyle'),\r\n TextInput: require('./TextInput'),\r\n Button: require('./Button'),\r\n CheckBox: require('./CheckBox'),\r\n MathHelper: require('./MathHelper'),\r\n Tween: require('./Tween'),\r\n Ease: require('./Ease/Ease'),\r\n Interaction: require('./Interaction/Interaction'),\r\n Ticker: require('./Ticker').shared,\r\n};\r\n\r\n\r\nmodule.exports = UI;","var UISettings = require('./UISettings'),\r\n UI = require('./UI'),\r\n DragEvent = require('./Interaction/DragEvent'),\r\n DragDropController = require('./Interaction/DragDropController');\r\n\r\n/**\r\n * Base class of all UIObjects\r\n *\r\n * @class\r\n * @extends PIXI.UI.UIBase\r\n * @param width {Number} Width of the UIObject\r\n * @param height {Number} Height of the UIObject\r\n */\r\nfunction UIBase(width, height) {\r\n PIXI.utils.EventEmitter.call(this);\r\n this.container = new PIXI.Container();\r\n this.setting = new UISettings();\r\n this.children = [];\r\n this.parent = null;\r\n this.stage = null;\r\n this.initialized = false;\r\n this.dragInitialized = false;\r\n this.dropInitialized = false;\r\n this.dirty = true;\r\n this._oldWidth = -1;\r\n this._oldHeight = -1;\r\n this.pixelPerfect = true;\r\n\r\n\r\n if (width && isNaN(width) && width.indexOf('%') != -1) {\r\n this.setting.widthPct = parseFloat(width.replace('%', '')) * 0.01;\r\n }\r\n else {\r\n this.setting.widthPct = null;\r\n }\r\n\r\n if (height && isNaN(height) && height.indexOf('%') != -1)\r\n this.setting.heightPct = parseFloat(height.replace('%', '')) * 0.01;\r\n else {\r\n this.setting.heightPct = null;\r\n }\r\n\r\n this.setting.width = width || 0;\r\n this.setting.height = height || 0;\r\n\r\n //actual values\r\n this._width = 0;\r\n this._height = 0;\r\n this._minWidth = null;\r\n this._minHeight = null;\r\n this._maxWidth = null;\r\n this._maxHeight = null;\r\n this._anchorLeft = null;\r\n this._anchorRight = null;\r\n this._anchorTop = null;\r\n this._anchorBottom = null;\r\n this._left = null;\r\n this._right = null;\r\n this._top = null;\r\n this._bottom = null;\r\n\r\n this._dragPosition = null; //used for overriding positions if tweens is playing\r\n}\r\n\r\nUIBase.prototype = Object.create(PIXI.utils.EventEmitter.prototype);\r\nUIBase.prototype.constructor = UIBase;\r\nmodule.exports = UIBase;\r\n\r\n/**\r\n * Renders the object using the WebGL renderer\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.updatesettings = function (updateChildren, updateParent) {\r\n\r\n if (!this.initialized) {\r\n if (this.parent !== null && this.parent.stage !== null && this.parent.initialized) {\r\n this.initialize();\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n\r\n if (updateParent) this.updateParent();\r\n this.baseupdate();\r\n this.update();\r\n if (updateChildren) this.updateChildren();\r\n};\r\n\r\n/**\r\n * Update method (override from other UIObjects)\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.update = function () {\r\n};\r\n\r\n\r\n/**\r\n * Updates the parent\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.updateParent = function () {\r\n if (this.parent !== null) {\r\n if (this.parent.updatesettings) {\r\n this.parent.updatesettings(false, true);\r\n }\r\n }\r\n};\r\n\r\n\r\n/**\r\n * Updates the UIObject with all base settings\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.baseupdate = function () {\r\n //return if parent size didnt change\r\n if (this.parent !== null) {\r\n var parentHeight, parentWidth;\r\n\r\n\r\n\r\n //transform convertion (% etc)\r\n this.dirty = true; \r\n this._width = this.actual_width;\r\n this._height = this.actual_height;\r\n this._minWidth = this.actual_minWidth;\r\n this._minHeight = this.actual_minHeight;\r\n this._maxWidth = this.actual_maxWidth;\r\n this._maxHeight = this.actual_maxHeight;\r\n this._anchorLeft = this.actual_anchorLeft;\r\n this._anchorRight = this.actual_anchorRight;\r\n this._anchorTop = this.actual_anchorTop;\r\n this._anchorBottom = this.actual_anchorBottom;\r\n this._left = this.actual_left;\r\n this._right = this.actual_right;\r\n this._top = this.actual_top;\r\n this._bottom = this.actual_bottom;\r\n this._parentWidth = parentWidth = this.parent._width;\r\n this._parentHeight = parentHeight = this.parent._height;\r\n this.dirty = false;\r\n\r\n\r\n var pivotXOffset = this.pivotX * this._width;\r\n var pivotYOffset = this.pivotY * this._height;\r\n\r\n if (this.pixelPerfect) {\r\n pivotXOffset = Math.round(pivotXOffset);\r\n pivotYOffset = Math.round(pivotYOffset);\r\n }\r\n\r\n\r\n if (this.horizontalAlign === null) {\r\n //get anchors (use left right if conflict)\r\n if (this._anchorLeft !== null && this._anchorRight === null && this._right !== null)\r\n this._anchorRight = this._right;\r\n else if (this._anchorLeft === null && this._anchorRight !== null && this._left !== null)\r\n this._anchorLeft = this._left;\r\n else if (this._anchorLeft === null && this._anchorRight === null && this._left !== null && this._right !== null) {\r\n this._anchorLeft = this._left;\r\n this._anchorRight = this._right;\r\n }\r\n\r\n\r\n var useHorizontalAnchor = this._anchorLeft !== null || this._anchorRight !== null;\r\n var useLeftRight = !useHorizontalAnchor && (this._left !== null || this._right !== null);\r\n\r\n if (useLeftRight) {\r\n if (this._left !== null)\r\n this.container.position.x = this._left;\r\n else if (this._right !== null)\r\n this.container.position.x = parentWidth - this._right;\r\n }\r\n else if (useHorizontalAnchor) {\r\n\r\n if (this._anchorLeft !== null && this._anchorRight === null)\r\n this.container.position.x = this._anchorLeft;\r\n else if (this._anchorLeft === null && this._anchorRight !== null)\r\n this.container.position.x = parentWidth - this._width - this._anchorRight;\r\n else if (this._anchorLeft !== null && this._anchorRight !== null) {\r\n this.container.position.x = this._anchorLeft;\r\n this._width = parentWidth - this._anchorLeft - this._anchorRight;\r\n }\r\n this.container.position.x += pivotXOffset;\r\n }\r\n else {\r\n this.container.position.x = 0;\r\n }\r\n }\r\n\r\n\r\n\r\n if (this.verticalAlign === null) {\r\n //get anchors (use top bottom if conflict)\r\n if (this._anchorTop !== null && this._anchorBottom === null && this._bottom !== null)\r\n this._anchorBottom = this._bottom;\r\n if (this._anchorTop === null && this._anchorBottom !== null && this._top !== null)\r\n this._anchorTop = this._top;\r\n\r\n var useVerticalAnchor = this._anchorTop !== null || this._anchorBottom !== null;\r\n var useTopBottom = !useVerticalAnchor && (this._top !== null || this._bottom !== null);\r\n\r\n if (useTopBottom) {\r\n if (this._top !== null)\r\n this.container.position.y = this._top;\r\n else if (this._bottom !== null)\r\n this.container.position.y = parentHeight - this._bottom;\r\n }\r\n else if (useVerticalAnchor) {\r\n if (this._anchorTop !== null && this._anchorBottom === null)\r\n this.container.position.y = this._anchorTop;\r\n else if (this._anchorTop === null && this._anchorBottom !== null)\r\n this.container.position.y = parentHeight - this._height - this._anchorBottom;\r\n else if (this._anchorTop !== null && this._anchorBottom !== null) {\r\n this.container.position.y = this._anchorTop;\r\n this._height = parentHeight - this._anchorTop - this._anchorBottom;\r\n }\r\n this.container.position.y += pivotYOffset;\r\n }\r\n else {\r\n this.container.position.y = 0;\r\n }\r\n }\r\n\r\n //min/max sizes\r\n if (this._maxWidth !== null && this._width > this._maxWidth) this._width = this._maxWidth;\r\n if (this._width < this._minWidth) this._width = this._minWidth;\r\n\r\n if (this._maxHeight !== null && this._height > this._maxHeight) this._height = this._maxHeight;\r\n if (this._height < this._minHeight) this._height = this._minHeight;\r\n\r\n\r\n //pure vertical/horizontal align\r\n if (this.horizontalAlign !== null) {\r\n if (this.horizontalAlign == \"center\")\r\n this.container.position.x = parentWidth * 0.5 - this._width * 0.5;\r\n else if (this.horizontalAlign == \"right\")\r\n this.container.position.x = parentWidth - this._width;\r\n else\r\n this.container.position.x = 0;\r\n this.container.position.x += pivotXOffset;\r\n }\r\n if (this.verticalAlign !== null) {\r\n if (this.verticalAlign == \"middle\")\r\n this.container.position.y = parentHeight * 0.5 - this._height * 0.5;\r\n else if (this.verticalAlign == \"bottom\")\r\n this.container.position.y = parentHeight - this._height;\r\n else\r\n this.container.position.y = 0;\r\n this.container.position.y += pivotYOffset;\r\n }\r\n\r\n\r\n //Unrestricted dragging\r\n if (this.dragging && !this.setting.dragRestricted) {\r\n this.container.position.x = this._dragPosition.x;\r\n this.container.position.y = this._dragPosition.y;\r\n }\r\n\r\n\r\n //scale\r\n if (this.setting.scaleX !== null) this.container.scale.x = this.setting.scaleX;\r\n if (this.setting.scaleY !== null) this.container.scale.y = this.setting.scaleY;\r\n\r\n //pivot\r\n if (this.setting.pivotX !== null) this.container.pivot.x = pivotXOffset;\r\n if (this.setting.pivotY !== null) this.container.pivot.y = pivotYOffset;\r\n\r\n if (this.setting.alpha !== null) this.container.alpha = this.setting.alpha;\r\n if (this.setting.rotation !== null) this.container.rotation = this.setting.rotation;\r\n\r\n //make pixel perfect\r\n if (this.pixelPerfect) {\r\n this._width = Math.round(this._width);\r\n this._height = Math.round(this._height);\r\n this.container.position.x = Math.round(this.container.position.x);\r\n this.container.position.y = Math.round(this.container.position.y);\r\n }\r\n\r\n\r\n\r\n }\r\n};\r\n\r\n\r\n/**\r\n * Updates all UI Children\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.updateChildren = function () {\r\n for (var i = 0; i < this.children.length; i++) {\r\n this.children[i].updatesettings(true);\r\n }\r\n};\r\n\r\nUIBase.prototype.addChild = function (UIObject) {\r\n var argumentsLength = arguments.length;\r\n if (argumentsLength > 1) {\r\n for (var i = 0; i < argumentsLength; i++) {\r\n this.addChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n if (UIObject.parent) {\r\n UIObject.parent.removeChild(UIObject);\r\n }\r\n\r\n UIObject.parent = this;\r\n this.container.addChild(UIObject.container);\r\n this.children.push(UIObject);\r\n this.updatesettings(true, true);\r\n }\r\n\r\n return UIObject;\r\n};\r\n\r\nUIBase.prototype.removeChild = function (UIObject) {\r\n var argumentLenght = arguments.length;\r\n if (argumentLenght > 1) {\r\n for (var i = 0; i < argumentLenght; i++) {\r\n this.removeChild(arguments[i]);\r\n }\r\n }\r\n else {\r\n var index = this.children.indexOf(UIObject);\r\n if (index !== -1) {\r\n var oldUIParent = UIObject.parent;\r\n var oldParent = UIObject.container.parent;\r\n UIObject.container.parent.removeChild(UIObject.container);\r\n this.children.splice(index, 1);\r\n UIObject.parent = null;\r\n\r\n //oldParent._recursivePostUpdateTransform();\r\n setTimeout(function () { //hack but cant get the transforms to update propertly otherwice?\r\n if (oldUIParent.updatesettings)\r\n oldUIParent.updatesettings(true, true);\r\n }, 0);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Initializes the object when its added to an UIStage\r\n *\r\n * @private\r\n */\r\nUIBase.prototype.initialize = function () {\r\n this.initialized = true;\r\n this.stage = this.parent.stage;\r\n if (this.draggable) {\r\n this.initDraggable();\r\n }\r\n\r\n if (this.droppable) {\r\n this.initDroppable();\r\n }\r\n};\r\n\r\nUIBase.prototype.clearDraggable = function () {\r\n if (this.dragInitialized) {\r\n this.dragInitialized = false;\r\n this.drag.stopEvent();\r\n }\r\n};\r\n\r\nUIBase.prototype.initDraggable = function () {\r\n if (!this.dragInitialized) {\r\n this.dragInitialized = true;\r\n var containerStart = new PIXI.Point(),\r\n stageOffset = new PIXI.Point(),\r\n self = this;\r\n\r\n this._dragPosition = new PIXI.Point();\r\n this.drag = new DragEvent(this);\r\n this.drag.onDragStart = function (e) {\r\n var added = DragDropController.add(this, e);\r\n if (!this.dragging && added) {\r\n this.dragging = true;\r\n this.container.interactive = false;\r\n containerStart.copy(this.container.position);\r\n if (this.dragContainer) {\r\n var c = this.dragContainer.container ? this.dragContainer.container : this.dragContainer;\r\n if (c) {\r\n //_this.container._recursivePostUpdateTransform();\r\n stageOffset.set(c.worldTransform.tx - this.parent.container.worldTransform.tx, c.worldTransform.ty - this.parent.container.worldTransform.ty);\r\n c.addChild(this.container);\r\n }\r\n } else {\r\n stageOffset.set(0);\r\n }\r\n\r\n }\r\n };\r\n\r\n\r\n this.drag.onDragMove = function (e, offset) {\r\n if (this.dragging) {\r\n this._dragPosition.set(containerStart.x + offset.x - stageOffset.x, containerStart.y + offset.y - stageOffset.y);\r\n this.x = this._dragPosition.x;\r\n this.y = this._dragPosition.y;\r\n }\r\n };\r\n\r\n this.drag.onDragEnd = function (e) {\r\n if (this.dragging) {\r\n this.dragging = false;\r\n //Return to container after 1ms if not picked up by a droppable\r\n setTimeout(function () {\r\n self.container.interactive = true;\r\n var item = DragDropController.getItem(self);\r\n if (item) {\r\n var container = self.parent === self.stage ? self.stage : self.parent.container;\r\n container.toLocal(self.container.position, self.container.parent, self);\r\n if (container != self.container) {\r\n self.parent.addChild(self);\r\n }\r\n }\r\n }, 1);\r\n }\r\n\r\n };\r\n }\r\n};\r\n\r\nUIBase.prototype.clearDroppable = function () {\r\n if (this.dropInitialized) {\r\n this.dropInitialized = false;\r\n this.container.removeListener('mouseup', this.onDrop);\r\n this.container.removeListener('touchend', this.onDrop);\r\n }\r\n};\r\n\r\nUIBase.prototype.initDroppable = function () {\r\n if (!this.dropInitialized) {\r\n this.dropInitialized = true;\r\n var container = this.container,\r\n self = this;\r\n\r\n this.container.interactive = true;\r\n this.onDrop = function (event) {\r\n var item = DragDropController.getEventItem(event, self.dropGroup);\r\n if (item && item.dragging) {\r\n item.dragging = false;\r\n item.container.interactive = true;\r\n var parent = self.droppableReparent !== null ? self.droppableReparent : self;\r\n parent.container.toLocal(item.container.position, item.container.parent, item);\r\n if (parent.container != item.container.parent)\r\n parent.addChild(item);\r\n }\r\n };\r\n\r\n container.on('mouseup', this.onDrop);\r\n container.on('touchend', this.onDrop);\r\n }\r\n};\r\n\r\nObject.defineProperties(UIBase.prototype, {\r\n x: {\r\n get: function () {\r\n return this.setting.left;\r\n },\r\n set: function (val) {\r\n this.left = val;\r\n }\r\n },\r\n y: {\r\n get: function () {\r\n return this.setting.top;\r\n },\r\n set: function (val) {\r\n this.top = val;\r\n }\r\n },\r\n width: {\r\n get: function () {\r\n return this.setting.width;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.widthPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.widthPct = null;\r\n \r\n this.setting.width = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_width: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.widthPct !== null) {\r\n this._width = this.parent._width * this.setting.widthPct;\r\n }\r\n else {\r\n this._width = this.setting.width;\r\n }\r\n }\r\n return this._width;\r\n }\r\n },\r\n height: {\r\n get: function () {\r\n return this.setting.height;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.heightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.heightPct = null;\r\n \r\n this.setting.height = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_height: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.heightPct !== null) {\r\n this._height = this.parent._height * this.setting.heightPct;\r\n }\r\n else {\r\n this._height = this.setting.height;\r\n }\r\n }\r\n return this._height;\r\n }\r\n },\r\n minWidth: {\r\n get: function () {\r\n return this.setting.minWidth;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.minWidthPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.minWidthPct = null;\r\n \r\n this.setting.minWidth = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_minWidth: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.minWidthPct !== null) {\r\n this._minWidth = this.parent._width * this.setting.minWidthPct;\r\n }\r\n else {\r\n this._minWidth = this.setting.minWidth;\r\n }\r\n }\r\n return this._minWidth;\r\n }\r\n },\r\n minHeight: {\r\n get: function () {\r\n return this.setting.minHeight;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.minHeightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.minHeightPct = null;\r\n \r\n this.setting.minHeight = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_minHeight: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.minHeightPct !== null) {\r\n this._minHeight = this.parent._height * this.setting.minHeightPct;\r\n }\r\n else {\r\n this._minHeight = this.setting.minHeight;\r\n }\r\n }\r\n return this._minHeight;\r\n }\r\n },\r\n maxWidth: {\r\n get: function () {\r\n return this.setting.maxWidth;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.maxWidthPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.maxWidthPct = null;\r\n \r\n\r\n this.setting.maxWidth = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_maxWidth: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.maxWidthPct !== null) {\r\n this._maxWidth = this.parent._width * this.setting.maxWidthPct;\r\n }\r\n else {\r\n this._maxWidth = this.setting.maxWidth;\r\n }\r\n }\r\n return this._maxWidth;\r\n }\r\n },\r\n maxHeight: {\r\n get: function () {\r\n return this.setting.maxHeight;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.maxHeightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.maxHeightPct = null;\r\n \r\n this.setting.maxHeight = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_maxHeight: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.maxHeightPct !== null) {\r\n this._maxHeight = this.parent._height * this.setting.maxHeightPct;\r\n }\r\n else {\r\n this._maxHeight = this.setting.maxHeight;\r\n }\r\n }\r\n return this._maxHeight;\r\n }\r\n },\r\n anchorLeft: {\r\n get: function () {\r\n return this.setting.anchorLeft;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1) \r\n this.setting.anchorLeftPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else \r\n this.setting.anchorLeftPct = null;\r\n \r\n this.setting.anchorLeft = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorLeft: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorLeftPct !== null) {\r\n this._anchorLeft = this.parent._width * this.setting.anchorLeftPct;\r\n }\r\n else {\r\n this._anchorLeft = this.setting.anchorLeft;\r\n }\r\n }\r\n return this._anchorLeft;\r\n }\r\n },\r\n anchorRight: {\r\n get: function () {\r\n return this.setting.anchorRight;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.anchorRightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.anchorRightPct = null;\r\n \r\n this.setting.anchorRight = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorRight: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorRightPct !== null) {\r\n this._anchorRight = this.parent._width * this.setting.anchorRightPct;\r\n }\r\n else {\r\n this._anchorRight = this.setting.anchorRight;\r\n }\r\n }\r\n return this._anchorRight;\r\n }\r\n },\r\n anchorTop: {\r\n get: function () {\r\n return this.setting.anchorTop;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.anchorTopPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.anchorTopPct = null;\r\n \r\n this.setting.anchorTop = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorTop: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorTopPct !== null) {\r\n this._anchorTop = this.parent._height * this.setting.anchorTopPct;\r\n }\r\n else {\r\n this._anchorTop = this.setting.anchorTop;\r\n }\r\n }\r\n return this._anchorTop;\r\n }\r\n },\r\n anchorBottom: {\r\n get: function () {\r\n return this.setting.anchorBottom;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.anchorBottomPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else \r\n this.setting.anchorBottomPct = null;\r\n \r\n this.setting.anchorBottom = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_anchorBottom: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.anchorBottomPct !== null) {\r\n this._anchorBottom = this.parent._height * this.setting.anchorBottomPct;\r\n }\r\n else {\r\n this._anchorBottom = this.setting.anchorBottom;\r\n }\r\n }\r\n return this._anchorBottom;\r\n }\r\n },\r\n left: {\r\n get: function () {\r\n return this.setting.left;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.leftPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.leftPct = null;\r\n \r\n this.setting.left = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_left: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.leftPct !== null) {\r\n this._left = this.parent._width * this.setting.leftPct;\r\n }\r\n else {\r\n this._left = this.setting.left;\r\n }\r\n }\r\n return this._left;\r\n }\r\n },\r\n right: {\r\n get: function () {\r\n return this.setting.right;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.rightPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.rightPct = null;\r\n\r\n this.setting.right = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_right: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.rightPct !== null) {\r\n this._right = this.parent._width * this.setting.rightPct;\r\n }\r\n else {\r\n this._right = this.setting.right;\r\n }\r\n }\r\n return this._right;\r\n }\r\n },\r\n top: {\r\n get: function () {\r\n return this.setting.top;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.topPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.topPct = null;\r\n\r\n this.setting.top = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_top: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.topPct !== null) {\r\n this._top = this.parent._height * this.setting.topPct;\r\n }\r\n else {\r\n this._top = this.setting.top;\r\n }\r\n }\r\n return this._top;\r\n }\r\n },\r\n bottom: {\r\n get: function () {\r\n return this.setting.bottom;\r\n },\r\n set: function (val) {\r\n if (isNaN(val) && val.indexOf('%') !== -1)\r\n this.setting.bottomPct = parseFloat(val.replace('%', '')) * 0.01;\r\n else\r\n this.setting.bottomPct = null;\r\n\r\n this.setting.bottom = val;\r\n this.updatesettings(true);\r\n }\r\n },\r\n actual_bottom: {\r\n get: function () {\r\n if (this.dirty) {\r\n if (this.setting.bottomPct !== null) {\r\n this._bottom = this.parent._height * this.setting.bottomPct;\r\n }\r\n else {\r\n this._bottom = this.setting.bottom;\r\n }\r\n }\r\n return this._bottom;\r\n }\r\n },\r\n verticalAlign: {\r\n get: function () {\r\n return this.setting.verticalAlign;\r\n },\r\n set: function (val) {\r\n this.setting.verticalAlign = val;\r\n this.baseupdate();\r\n }\r\n },\r\n horizontalAlign: {\r\n get: function () {\r\n return this.setting.horizontalAlign;\r\n },\r\n set: function (val) {\r\n this.setting.horizontalAlign = val;\r\n this.baseupdate();\r\n }\r\n },\r\n tint: {\r\n get: function () {\r\n return this.setting.tint;\r\n },\r\n set: function (val) {\r\n this.setting.tint = val;\r\n this.update();\r\n }\r\n },\r\n alpha: {\r\n get: function () {\r\n return this.setting.alpha;\r\n },\r\n set: function (val) {\r\n this.setting.alpha = val;\r\n this.container.alpha = val;\r\n }\r\n },\r\n rotation: {\r\n get: function () {\r\n return this.setting.rotation;\r\n },\r\n set: function (val) {\r\n this.setting.rotation = val;\r\n this.container.rotation = val;\r\n }\r\n },\r\n blendMode: {\r\n get: function () {\r\n return this.setting.blendMode;\r\n },\r\n set: function (val) {\r\n this.setting.blendMode = val;\r\n this.update();\r\n }\r\n },\r\n pivotX: {\r\n get: function () {\r\n return this.setting.pivotX;\r\n },\r\n set: function (val) {\r\n this.setting.pivotX = val;\r\n this.baseupdate();\r\n this.update();\r\n }\r\n },\r\n pivotY: {\r\n get: function () {\r\n return this.setting.pivotY;\r\n },\r\n set: function (val) {\r\n this.setting.pivotY = val;\r\n this.baseupdate();\r\n this.update();\r\n }\r\n },\r\n pivot: {\r\n set: function (val) {\r\n this.setting.pivotX = val;\r\n this.setting.pivotY = val;\r\n this.baseupdate();\r\n this.update();\r\n }\r\n },\r\n scaleX: {\r\n get: function () {\r\n return this.setting.scaleX;\r\n },\r\n set: function (val) {\r\n this.setting.scaleX = val;\r\n this.container.scale.x = val;\r\n }\r\n },\r\n scaleY: {\r\n get: function () {\r\n return this.setting.scaleY;\r\n },\r\n set: function (val) {\r\n this.setting.scaleY = val;\r\n this.container.scale.y = val;\r\n }\r\n },\r\n scale: {\r\n get: function () {\r\n return this.setting.scaleX;\r\n },\r\n set: function (val) {\r\n this.setting.scaleX = val;\r\n this.setting.scaleY = val;\r\n this.container.scale.x = val;\r\n this.container.scale.y = val;\r\n }\r\n },\r\n\r\n draggable: {\r\n get: function () {\r\n return this.setting.draggable;\r\n },\r\n set: function (val) {\r\n this.setting.draggable = val;\r\n if (this.initialized) {\r\n if (val)\r\n this.initDraggable();\r\n else\r\n this.clearDraggable();\r\n }\r\n }\r\n },\r\n dragRestricted: {\r\n get: function () {\r\n return this.setting.dragRestricted;\r\n },\r\n set: function (val) {\r\n this.setting.dragRestricted = val;\r\n }\r\n },\r\n dragRestrictAxis: {\r\n get: function () {\r\n return this.setting.dragRestrictAxis;\r\n },\r\n set: function (val) {\r\n this.setting.dragRestrictAxis = val;\r\n }\r\n },\r\n dragThreshold: {\r\n get: function () {\r\n return this.setting.dragThreshold;\r\n },\r\n set: function (val) {\r\n this.setting.dragThreshold = val;\r\n }\r\n },\r\n dragGroup: {\r\n get: function () {\r\n return this.setting.dragGroup;\r\n },\r\n set: function (val) {\r\n this.setting.dragGroup = val;\r\n }\r\n },\r\n dragContainer: {\r\n get: function () {\r\n return this.setting.dragContainer;\r\n },\r\n set: function (val) {\r\n this.setting.dragContainer = val;\r\n }\r\n },\r\n droppable: {\r\n get: function () {\r\n return this.setting.droppable;\r\n },\r\n set: function (val) {\r\n this.setting.droppable = true;\r\n if (this.initialized) {\r\n if (val)\r\n this.initDroppable();\r\n else\r\n this.clearDroppable();\r\n }\r\n }\r\n },\r\n droppableReparent: {\r\n get: function () {\r\n return this.setting.droppableReparent;\r\n },\r\n set: function (val) {\r\n this.setting.droppableReparent = val;\r\n }\r\n },\r\n dropGroup: {\r\n get: function () {\r\n return this.setting.dropGroup;\r\n },\r\n set: function (val) {\r\n this.setting.dropGroup = val;\r\n }\r\n },\r\n renderable: {\r\n get: function () {\r\n return this.container.renderable;\r\n },\r\n set: function (val) {\r\n this.container.renderable = val;\r\n }\r\n },\r\n visible: {\r\n get: function () {\r\n return this.container.visible;\r\n },\r\n set: function (val) {\r\n this.container.visible = val;\r\n }\r\n },\r\n cacheAsBitmap: {\r\n get: function () {\r\n return this.container.cacheAsBitmap;\r\n },\r\n set: function (val) {\r\n this.container.cacheAsBitmap = val;\r\n }\r\n },\r\n onClick: {\r\n get: function () {\r\n return this.container.click;\r\n },\r\n set: function (val) {\r\n this.container.click = val;\r\n }\r\n },\r\n interactive: {\r\n get: function () {\r\n return this.container.interactive;\r\n },\r\n set: function (val) {\r\n this.container.interactive = val;\r\n }\r\n },\r\n interactiveChildren: {\r\n get: function () {\r\n return this.container.interactiveChildren;\r\n },\r\n set: function (val) {\r\n this.container.interactiveChildren = val;\r\n }\r\n }\r\n});","/**\r\n * Settings object for all UIObjects\r\n *\r\n * @class\r\n * @memberof PIXI.UI\r\n */\r\nfunction UISettings() {\r\n this.width = 0;\r\n this.height = 0;\r\n this.minHeight = 0;\r\n this.maxWidth = null;\r\n this.maxHeight = null;\r\n this.left = null;\r\n this.right = null;\r\n this.top = null;\r\n this.bottom = null;\r\n this.anchorLeft = null;\r\n this.anchorRight = null;\r\n this.anchorTop = null;\r\n this.anchorBottom = null;\r\n\r\n this.widthPct = null;\r\n this.heightPct = null;\r\n this.minWidthPct = null;\r\n this.minHeightPct = null;\r\n this.maxWidthPct = null;\r\n this.maxHeightPct = null;\r\n this.minWidth = 0;\r\n this.leftPct = null;\r\n this.rightPct = null;\r\n this.topPct = null;\r\n this.bottomPct = null;\r\n this.anchorLeftPct = null;\r\n this.anchorRightPct = null;\r\n this.anchorTopPct = null;\r\n this.anchorBottomPct = null;\r\n\r\n this.pivotX = 0;\r\n this.pivotY = 0;\r\n this.scaleX = 1;\r\n this.scaleY = 1;\r\n this.verticalAlign = null;\r\n this.horizontalAlign = null;\r\n this.rotation = null;\r\n this.blendMode = null;\r\n this.tint = null;\r\n this.alpha = 1;\r\n\r\n\r\n this.draggable = null;\r\n this.dragRestricted = false;\r\n this.dragRestrictAxis = null; //x, y\r\n this.dragThreshold = 0;\r\n this.dragGroup = null;\r\n this.dragContainer = null;\r\n this.droppable = null;\r\n this.droppableReparent = null;\r\n this.dropGroup = null;\r\n}\r\n\r\n\r\nmodule.exports = UISettings;\r\n\r\n\r\n","\r\nvar Library = {\r\n UI: require('./UI')\r\n};\r\n\r\n//dump everything into extras\r\n\r\nObject.assign(PIXI, Library);\r\n\r\nmodule.exports = Library;\r\n"],"sourceRoot":"."} \ No newline at end of file diff --git a/src/Button.js b/src/Button.js index 3a63c4d..5317def 100644 --- a/src/Button.js +++ b/src/Button.js @@ -148,6 +148,5 @@ Object.defineProperties(Button.prototype, { * "blur" * "focus" * "focusChanged" param: [bool]isFocussed - * "change" param: [bool]isChecked * */ \ No newline at end of file diff --git a/src/Interaction/ClickEvent.js b/src/Interaction/ClickEvent.js index a02d548..07c4164 100644 --- a/src/Interaction/ClickEvent.js +++ b/src/Interaction/ClickEvent.js @@ -2,11 +2,17 @@ var bound = false, self = this, id = 0, - ishover = false; + ishover = false, + mouse = new PIXI.Point(), + offset = new PIXI.Point(), + movementX = 0, + movementY = 0; + obj.container.interactive = true; var _onMouseDown = function (event) { + mouse.copy(event.data.global); id = event.data.identifier; self.onPress.call(obj, event, true); if (!bound) { @@ -20,6 +26,7 @@ var _mouseUpAll = function (event) { if (event.data.identifier !== id) return; + offset.set(event.data.global.x - mouse.x, event.data.global.y - mouse.y); if (bound) { obj.container.removeListener('mouseup', _onMouseUp); obj.container.removeListener('mouseupoutside', _onMouseUpOutside); @@ -33,6 +40,11 @@ var _onMouseUp = function (event) { if (event.data.identifier !== id) return; _mouseUpAll(event); + + movementX = Math.abs(offset.x); + movementY = Math.abs(offset.y); + if (Math.max(movementX, movementY) > obj.dragThreshold) return; + self.onClick.call(obj, event); }; diff --git a/test/button.html b/test/button.html new file mode 100644 index 0000000..8cd4770 --- /dev/null +++ b/test/button.html @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + +