Subversion Repository Public Repository

Nextrek

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
    "uid": "5BCC16F29DC79547E53B16B76EC0822CB2E9",
    "isLoaded": true,
    "lastModificationTime": 0,
    "items": {
        "name": "Component_UIBehavior",
        "type": "game_script",
        "order": 14,
        "content": "# ===================================================================\n#\n#   Script: Component_StyleHandler\n#\n#   $$COPYRIGHT$$\n#\n# ===================================================================\nclass Component_UIBehavior extends gs.Component\n    ###*\n    * Called if this object instance is restored from a data-bundle. It can be used\n    * re-assign event-handler, anonymous functions, etc.\n    * \n    * @method onDataBundleRestore.\n    * @param Object data - The data-bundle\n    * @param gs.ObjectCodecContext context - The codec-context.\n    ###\n    onDataBundleRestore: (data, context) ->\n        @setupEventHandlers()\n        \n    ###*\n    * @module ui\n    * @class Component_UIBehavior\n    * @extends gs.Component\n    * @memberof ui\n    * @constructor\n    ###\n    constructor: () ->\n        @breakChainAt = null\n        @containsPointer = no\n        @isAnimating = no\n        @viewData_ = [yes, no, no, yes, no]\n        @nextKeyObjectId = \"\"\n        @nextKeyObject_ = null\n        @prevKeyObject_ = null\n        \n    @accessors \"nextKeyObject\", \n        set: (v) ->\n            @nextKeyObject_ = v\n            if v\n                v.ui.prevKeyObject_ = @object\n        get: -> @nextKeyObject_\n        \n    @accessors \"prevKeyObject\", \n        set: (v) ->\n            @prevKeyObject_ = v\n            if v\n                v.ui.nextKeyObject_ = @object\n        get: -> @prevKeyObject_\n                \n    @accessors \"selected\", \n        set: (v) -> \n            if v != @viewData_[2]\n                @viewData_[2] = v\n                @updateStyle()\n                \n        get: -> @viewData_[2]\n        \n    @accessors \"hover\", \n        set: (v) -> \n            if v != @viewData_[1]\n                @viewData_[1] = v\n                @updateStyle()\n                \n        get: -> @viewData_[1]\n        \n    @accessors \"enabled\",\n        set: (v) -> \n            if v != @viewData_[3]\n                @viewData_[3] = v\n                @updateStyle()\n                \n        get: -> @viewData_[3]\n        \n    @accessors \"focused\",\n        set: (v) ->\n            if v != @viewData_[4]\n                @viewData_[4] = v\n                @updateStyle()\n        get: -> @viewData_[4]\n        \n    @accessors \"viewData\",\n        set: (v) ->\n            if v != @viewData_\n                @viewData_ = v\n                @updateStyle()\n        get: -> @viewData_\n    \n    \n    ###*\n    * Prepares the UI-Object for display. This method should be called\n    * before a new created UI-Object will be displayed to position all\n    * sub-elements correctly.\n    *\n    * @method prepare\n    ###\n    prepare: ->\n        debugger\n        scene = SceneManager.scene\n        scene.preparing = yes\n        @object.update() # First Update: Bring all sub-elements in correct size\n        @object.update() # Second Update: Correct layout\n        scene.preparing = no\n        @object.events.emit(\"uiPrepareFinish\")\n     \n     \n    ###*\n    * Executes an animation defined for the specified event. Each UI-Object\n    * can have animations for certain events defined in JSON.\n    *\n    * @param {string} event - The event to execute the animation for such as \"onTerminate\" or \"onInitialize\". If\n    * no animation has been defined for the specified event, nothing will happen and the callback will be called \n    * immediately.\n    * @param {Function} callback - An optional callback function called when the animation ends.\n    * @method executeAnimation\n    ###\n    executeAnimation: (event, callback) ->\n        @isAnimating = yes\n        @disappearCounter = @object.subObjects.length + 1\n        @disappearCallback = callback\n        \n        for object in @object.subObjects\n            if object.ui\n                object.ui.executeAnimation(event, (sender) =>\n                    @disappearCounter--\n                    \n                    if @disappearCounter == 0\n                        @isAnimating = no\n                        @disappearCallback?(@object)\n                )\n            else\n                @disappearCounter--\n         \n        animation = @object.animations?.first (a) -> a.events.indexOf(event) != -1\n        \n        if animation\n            @object.animationExecutor.execute(animation, (sender) =>\n                @disappearCounter--\n                if @disappearCounter == 0\n                    @isAnimating = no\n                    @disappearCallback?(@object) \n            )\n        else\n            @disappearCounter--\n            if @disappearCounter == 0\n                @isAnimating = no\n                @disappearCallback?(@object) \n    \n    ###*\n    * Executes the animation defined for the \"onInitialize\" event. Each UI-Object\n    * can have animations for certain events defined in JSON.\n    *\n    * @param {Function} callback - An optional callback function called when the animation ends.\n    * @method appear\n    ###        \n    appear: (callback) -> \n        gs.GlobalEventManager.emit(\"uiAnimationStart\")\n        cb = (sender) => \n            gs.GlobalEventManager.emit(\"uiAnimationFinish\")\n            callback?(sender)\n        @executeAnimation(\"onInitialize\", cb)\n        \n    ###*\n    * Executes the animation defined for the \"onTerminate\" event. Each UI-Object\n    * can have animations for certain events defined in JSON.\n    *\n    * @param {Function} callback - An optional callback function called when the animation ends.\n    * @method disappear\n    ###    \n    disappear: (callback) -> \n        gs.GlobalEventManager.emit(\"uiAnimationStart\")\n        cb = (sender) => \n            gs.GlobalEventManager.emit(\"uiAnimationFinish\")\n            callback?(sender)\n        @executeAnimation(\"onTerminate\", cb)\n        \n    ###*\n    * Disposes the component.\n    *\n    * @method dispose\n    ###\n    dispose: ->\n        super\n        \n        gs.GlobalEventManager.offByOwner \"mouseUp\", @object\n        gs.GlobalEventManager.offByOwner(\"objectGotFocus\", @object)\n        gs.GlobalEventManager.offByOwner(\"keyUp\", @object)\n        gs.GlobalEventManager.offByOwner(\"mouseDown\", @object)\n        gs.GlobalEventManager.offByOwner(\"mouseMoved\", @object)\n     \n    ###*\n    * Adds event-handlers for mouse/touch events\n    *\n    * @method setupEventHandlers\n    ### \n    setupEventHandlers: ->\n        if @object.focusable\n            gs.GlobalEventManager.on \"objectGotFocus\", ((e) =>\n                if e.sender != @object\n                    @blur()\n            ),\n            null, @object\n\n            gs.GlobalEventManager.on \"keyUp\", ((e) =>\n                if @focused\n                    if @nextKeyObject and (Input.release(Input.KEY_DOWN) or Input.release(Input.KEY_RIGHT))\n                        @nextKeyObject.ui.focus()\n                        e.breakChain = yes\n                    else if @prevKeyObject and (Input.release(Input.KEY_UP) or Input.release(Input.KEY_LEFT))\n                        @prevKeyObject.ui.focus()\n                        e.breakChain = yes\n            ),\n            null, @object\n            \n        if @object.styles.first ((s) -> s.selector == 1)\n            gs.GlobalEventManager.on \"mouseMoved\", ((e) =>\n                    return if !@enabled\n                    contains = Rect.contains(@object.dstRect.x, @object.dstRect.y, \n                             @object.dstRect.width, @object.dstRect.height,\n                             Input.Mouse.x - @object.origin.x, Input.Mouse.y - @object.origin.y)\n                \n                    if @containsPointer != contains or (@hover and !contains)\n                        @containsPointer = contains\n                        @object.needsUpdate = yes\n                        @hover = contains\n                        \n                        @updateParentStyle()\n                        @updateChildrenStyle()\n    \n                    return null                       \n                ),\n                null, @object\n            \n        if @object.focusable or @object.styles.first ((s) -> s.selector == 2 || s.selector == 4)\n            gs.GlobalEventManager.on \"mouseDown\", ((e) =>\n                    return if !@enabled or Input.Mouse.buttons[Input.Mouse.LEFT] != 1\n                    contains = Rect.contains(@object.dstRect.x, @object.dstRect.y, \n                             @object.dstRect.width, @object.dstRect.height,\n                             Input.Mouse.x - @object.origin.x, Input.Mouse.y - @object.origin.y)\n                    \n                    if contains\n                        @object.needsUpdate = yes\n                        \n                        @focus()\n                        \n                        if @object.selectable\n                            if @object.group\n                                @selected = yes\n                                group = gs.ObjectManager.current.objectsByGroup(@object.group)\n                                for object in group\n                                    if object != @object\n                                        object.ui.selected = no\n                            else\n                                @selected = !@selected\n                        else\n                            @updateStyle()\n                            \n                        @updateParentStyle()\n                                        \n                    return null                        \n                ),\n                null, @object, 0\n                \n    ###*\n    * Initializes the binding-handler.\n    * \n    * @method setup\n    ###\n    setup: ->\n        @setupEventHandlers()\n    \n    ###*\n    * Gives the input focus to this UI object. If the UI object is not focusable, nothing will happen.\n    * \n    * @method focus\n    ###               \n    focus: ->\n        if @object.focusable and !@focused\n            @focused = yes\n            @updateChildrenStyle()\n            \n            gs.GlobalEventManager.emit(\"objectGotFocus\", @object)\n    \n    ###*\n    * Removes the input focus from this UI object. If the UI object is not focusable, nothing will happen.\n    * \n    * @method blur\n    ###\n    blur: ->\n        if @object.focusable and @focused\n            @focused = no\n            @updateChildrenStyle()\n            gs.GlobalEventManager.emit(\"objectLostFocus\", @object)\n            \n    updateParentStyle: ->\n        parent = @object.parent\n        while parent\n            parent.ui?.updateStyle()\n            parent = parent.parent\n        return null\n    \n    updateChildrenStyle: () ->\n        if @object.controls\n            for control in @object.controls\n                if control and control.ui\n                    control.ui.updateStyle()\n                    control.ui.updateChildrenStyle()\n        return null\n                    \n    updateStyle: ->\n        if @object.styles\n            for style in @object.styles\n                if !@viewData_[style.selector]\n                    style.revert(@object)\n                                \n            for style in @object.styles\n                if style.target == -1\n                    if @viewData_[style.selector]\n                        style.apply(@object)\n                else\n                    objects = @object.parentsByStyle[style.target]\n                    if objects\n                        object = objects[0]\n                        if object and object.ui.viewData_[style.selector]\n                            style.apply(@object)\n                            \n            if @object.font\n                @object.behavior.refresh?() # FIXME: Creates a dependency on Text-Behavior\n                \n        return null\n        \n    ###*\n    * Updates the binding-handler.\n    * \n    * @method update\n    ###   \n    update: ->\n        if @nextKeyObjectId and !@nextKeyObject\n            @nextKeyObject = gs.ObjectManager.current.objectById(@nextKeyObjectId)\n        \n     \nui.Component_UIBehavior = Component_UIBehavior",
        "parentId": "01A95DA3K01E8A4CB4SBE17E790BCE1FC035",
        "folder": false,
        "compiledContent": "var Component_UIBehavior,\n  extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  hasProp = {}.hasOwnProperty;\n\nComponent_UIBehavior = (function(superClass) {\n  extend(Component_UIBehavior, superClass);\n\n\n  /**\n  * Called if this object instance is restored from a data-bundle. It can be used\n  * re-assign event-handler, anonymous functions, etc.\n  * \n  * @method onDataBundleRestore.\n  * @param Object data - The data-bundle\n  * @param gs.ObjectCodecContext context - The codec-context.\n   */\n\n  Component_UIBehavior.prototype.onDataBundleRestore = function(data, context) {\n    return this.setupEventHandlers();\n  };\n\n\n  /**\n  * @module ui\n  * @class Component_UIBehavior\n  * @extends gs.Component\n  * @memberof ui\n  * @constructor\n   */\n\n  function Component_UIBehavior() {\n    this.breakChainAt = null;\n    this.containsPointer = false;\n    this.isAnimating = false;\n    this.viewData_ = [true, false, false, true, false];\n    this.nextKeyObjectId = \"\";\n    this.nextKeyObject_ = null;\n    this.prevKeyObject_ = null;\n  }\n\n  Component_UIBehavior.accessors(\"nextKeyObject\", {\n    set: function(v) {\n      this.nextKeyObject_ = v;\n      if (v) {\n        return v.ui.prevKeyObject_ = this.object;\n      }\n    },\n    get: function() {\n      return this.nextKeyObject_;\n    }\n  });\n\n  Component_UIBehavior.accessors(\"prevKeyObject\", {\n    set: function(v) {\n      this.prevKeyObject_ = v;\n      if (v) {\n        return v.ui.nextKeyObject_ = this.object;\n      }\n    },\n    get: function() {\n      return this.prevKeyObject_;\n    }\n  });\n\n  Component_UIBehavior.accessors(\"selected\", {\n    set: function(v) {\n      if (v !== this.viewData_[2]) {\n        this.viewData_[2] = v;\n        return this.updateStyle();\n      }\n    },\n    get: function() {\n      return this.viewData_[2];\n    }\n  });\n\n  Component_UIBehavior.accessors(\"hover\", {\n    set: function(v) {\n      if (v !== this.viewData_[1]) {\n        this.viewData_[1] = v;\n        return this.updateStyle();\n      }\n    },\n    get: function() {\n      return this.viewData_[1];\n    }\n  });\n\n  Component_UIBehavior.accessors(\"enabled\", {\n    set: function(v) {\n      if (v !== this.viewData_[3]) {\n        this.viewData_[3] = v;\n        return this.updateStyle();\n      }\n    },\n    get: function() {\n      return this.viewData_[3];\n    }\n  });\n\n  Component_UIBehavior.accessors(\"focused\", {\n    set: function(v) {\n      if (v !== this.viewData_[4]) {\n        this.viewData_[4] = v;\n        return this.updateStyle();\n      }\n    },\n    get: function() {\n      return this.viewData_[4];\n    }\n  });\n\n  Component_UIBehavior.accessors(\"viewData\", {\n    set: function(v) {\n      if (v !== this.viewData_) {\n        this.viewData_ = v;\n        return this.updateStyle();\n      }\n    },\n    get: function() {\n      return this.viewData_;\n    }\n  });\n\n\n  /**\n  * Prepares the UI-Object for display. This method should be called\n  * before a new created UI-Object will be displayed to position all\n  * sub-elements correctly.\n  *\n  * @method prepare\n   */\n\n  Component_UIBehavior.prototype.prepare = function() {\n    debugger;\n    var scene;\n    scene = SceneManager.scene;\n    scene.preparing = true;\n    this.object.update();\n    this.object.update();\n    scene.preparing = false;\n    return this.object.events.emit(\"uiPrepareFinish\");\n  };\n\n\n  /**\n  * Executes an animation defined for the specified event. Each UI-Object\n  * can have animations for certain events defined in JSON.\n  *\n  * @param {string} event - The event to execute the animation for such as \"onTerminate\" or \"onInitialize\". If\n  * no animation has been defined for the specified event, nothing will happen and the callback will be called \n  * immediately.\n  * @param {Function} callback - An optional callback function called when the animation ends.\n  * @method executeAnimation\n   */\n\n  Component_UIBehavior.prototype.executeAnimation = function(event, callback) {\n    var animation, i, len, object, ref, ref1;\n    this.isAnimating = true;\n    this.disappearCounter = this.object.subObjects.length + 1;\n    this.disappearCallback = callback;\n    ref = this.object.subObjects;\n    for (i = 0, len = ref.length; i < len; i++) {\n      object = ref[i];\n      if (object.ui) {\n        object.ui.executeAnimation(event, (function(_this) {\n          return function(sender) {\n            _this.disappearCounter--;\n            if (_this.disappearCounter === 0) {\n              _this.isAnimating = false;\n              return typeof _this.disappearCallback === \"function\" ? _this.disappearCallback(_this.object) : void 0;\n            }\n          };\n        })(this));\n      } else {\n        this.disappearCounter--;\n      }\n    }\n    animation = (ref1 = this.object.animations) != null ? ref1.first(function(a) {\n      return a.events.indexOf(event) !== -1;\n    }) : void 0;\n    if (animation) {\n      return this.object.animationExecutor.execute(animation, (function(_this) {\n        return function(sender) {\n          _this.disappearCounter--;\n          if (_this.disappearCounter === 0) {\n            _this.isAnimating = false;\n            return typeof _this.disappearCallback === \"function\" ? _this.disappearCallback(_this.object) : void 0;\n          }\n        };\n      })(this));\n    } else {\n      this.disappearCounter--;\n      if (this.disappearCounter === 0) {\n        this.isAnimating = false;\n        return typeof this.disappearCallback === \"function\" ? this.disappearCallback(this.object) : void 0;\n      }\n    }\n  };\n\n\n  /**\n  * Executes the animation defined for the \"onInitialize\" event. Each UI-Object\n  * can have animations for certain events defined in JSON.\n  *\n  * @param {Function} callback - An optional callback function called when the animation ends.\n  * @method appear\n   */\n\n  Component_UIBehavior.prototype.appear = function(callback) {\n    var cb;\n    gs.GlobalEventManager.emit(\"uiAnimationStart\");\n    cb = (function(_this) {\n      return function(sender) {\n        gs.GlobalEventManager.emit(\"uiAnimationFinish\");\n        return typeof callback === \"function\" ? callback(sender) : void 0;\n      };\n    })(this);\n    return this.executeAnimation(\"onInitialize\", cb);\n  };\n\n\n  /**\n  * Executes the animation defined for the \"onTerminate\" event. Each UI-Object\n  * can have animations for certain events defined in JSON.\n  *\n  * @param {Function} callback - An optional callback function called when the animation ends.\n  * @method disappear\n   */\n\n  Component_UIBehavior.prototype.disappear = function(callback) {\n    var cb;\n    gs.GlobalEventManager.emit(\"uiAnimationStart\");\n    cb = (function(_this) {\n      return function(sender) {\n        gs.GlobalEventManager.emit(\"uiAnimationFinish\");\n        return typeof callback === \"function\" ? callback(sender) : void 0;\n      };\n    })(this);\n    return this.executeAnimation(\"onTerminate\", cb);\n  };\n\n\n  /**\n  * Disposes the component.\n  *\n  * @method dispose\n   */\n\n  Component_UIBehavior.prototype.dispose = function() {\n    Component_UIBehavior.__super__.dispose.apply(this, arguments);\n    gs.GlobalEventManager.offByOwner(\"mouseUp\", this.object);\n    gs.GlobalEventManager.offByOwner(\"objectGotFocus\", this.object);\n    gs.GlobalEventManager.offByOwner(\"keyUp\", this.object);\n    gs.GlobalEventManager.offByOwner(\"mouseDown\", this.object);\n    return gs.GlobalEventManager.offByOwner(\"mouseMoved\", this.object);\n  };\n\n\n  /**\n  * Adds event-handlers for mouse/touch events\n  *\n  * @method setupEventHandlers\n   */\n\n  Component_UIBehavior.prototype.setupEventHandlers = function() {\n    if (this.object.focusable) {\n      gs.GlobalEventManager.on(\"objectGotFocus\", ((function(_this) {\n        return function(e) {\n          if (e.sender !== _this.object) {\n            return _this.blur();\n          }\n        };\n      })(this)), null, this.object);\n      gs.GlobalEventManager.on(\"keyUp\", ((function(_this) {\n        return function(e) {\n          if (_this.focused) {\n            if (_this.nextKeyObject && (Input.release(Input.KEY_DOWN) || Input.release(Input.KEY_RIGHT))) {\n              _this.nextKeyObject.ui.focus();\n              return e.breakChain = true;\n            } else if (_this.prevKeyObject && (Input.release(Input.KEY_UP) || Input.release(Input.KEY_LEFT))) {\n              _this.prevKeyObject.ui.focus();\n              return e.breakChain = true;\n            }\n          }\n        };\n      })(this)), null, this.object);\n    }\n    if (this.object.styles.first((function(s) {\n      return s.selector === 1;\n    }))) {\n      gs.GlobalEventManager.on(\"mouseMoved\", ((function(_this) {\n        return function(e) {\n          var contains;\n          if (!_this.enabled) {\n            return;\n          }\n          contains = Rect.contains(_this.object.dstRect.x, _this.object.dstRect.y, _this.object.dstRect.width, _this.object.dstRect.height, Input.Mouse.x - _this.object.origin.x, Input.Mouse.y - _this.object.origin.y);\n          if (_this.containsPointer !== contains || (_this.hover && !contains)) {\n            _this.containsPointer = contains;\n            _this.object.needsUpdate = true;\n            _this.hover = contains;\n            _this.updateParentStyle();\n            _this.updateChildrenStyle();\n          }\n          return null;\n        };\n      })(this)), null, this.object);\n    }\n    if (this.object.focusable || this.object.styles.first((function(s) {\n      return s.selector === 2 || s.selector === 4;\n    }))) {\n      return gs.GlobalEventManager.on(\"mouseDown\", ((function(_this) {\n        return function(e) {\n          var contains, group, i, len, object;\n          if (!_this.enabled || Input.Mouse.buttons[Input.Mouse.LEFT] !== 1) {\n            return;\n          }\n          contains = Rect.contains(_this.object.dstRect.x, _this.object.dstRect.y, _this.object.dstRect.width, _this.object.dstRect.height, Input.Mouse.x - _this.object.origin.x, Input.Mouse.y - _this.object.origin.y);\n          if (contains) {\n            _this.object.needsUpdate = true;\n            _this.focus();\n            if (_this.object.selectable) {\n              if (_this.object.group) {\n                _this.selected = true;\n                group = gs.ObjectManager.current.objectsByGroup(_this.object.group);\n                for (i = 0, len = group.length; i < len; i++) {\n                  object = group[i];\n                  if (object !== _this.object) {\n                    object.ui.selected = false;\n                  }\n                }\n              } else {\n                _this.selected = !_this.selected;\n              }\n            } else {\n              _this.updateStyle();\n            }\n            _this.updateParentStyle();\n          }\n          return null;\n        };\n      })(this)), null, this.object, 0);\n    }\n  };\n\n\n  /**\n  * Initializes the binding-handler.\n  * \n  * @method setup\n   */\n\n  Component_UIBehavior.prototype.setup = function() {\n    return this.setupEventHandlers();\n  };\n\n\n  /**\n  * Gives the input focus to this UI object. If the UI object is not focusable, nothing will happen.\n  * \n  * @method focus\n   */\n\n  Component_UIBehavior.prototype.focus = function() {\n    if (this.object.focusable && !this.focused) {\n      this.focused = true;\n      this.updateChildrenStyle();\n      return gs.GlobalEventManager.emit(\"objectGotFocus\", this.object);\n    }\n  };\n\n\n  /**\n  * Removes the input focus from this UI object. If the UI object is not focusable, nothing will happen.\n  * \n  * @method blur\n   */\n\n  Component_UIBehavior.prototype.blur = function() {\n    if (this.object.focusable && this.focused) {\n      this.focused = false;\n      this.updateChildrenStyle();\n      return gs.GlobalEventManager.emit(\"objectLostFocus\", this.object);\n    }\n  };\n\n  Component_UIBehavior.prototype.updateParentStyle = function() {\n    var parent, ref;\n    parent = this.object.parent;\n    while (parent) {\n      if ((ref = parent.ui) != null) {\n        ref.updateStyle();\n      }\n      parent = parent.parent;\n    }\n    return null;\n  };\n\n  Component_UIBehavior.prototype.updateChildrenStyle = function() {\n    var control, i, len, ref;\n    if (this.object.controls) {\n      ref = this.object.controls;\n      for (i = 0, len = ref.length; i < len; i++) {\n        control = ref[i];\n        if (control && control.ui) {\n          control.ui.updateStyle();\n          control.ui.updateChildrenStyle();\n        }\n      }\n    }\n    return null;\n  };\n\n  Component_UIBehavior.prototype.updateStyle = function() {\n    var base, i, j, len, len1, object, objects, ref, ref1, style;\n    if (this.object.styles) {\n      ref = this.object.styles;\n      for (i = 0, len = ref.length; i < len; i++) {\n        style = ref[i];\n        if (!this.viewData_[style.selector]) {\n          style.revert(this.object);\n        }\n      }\n      ref1 = this.object.styles;\n      for (j = 0, len1 = ref1.length; j < len1; j++) {\n        style = ref1[j];\n        if (style.target === -1) {\n          if (this.viewData_[style.selector]) {\n            style.apply(this.object);\n          }\n        } else {\n          objects = this.object.parentsByStyle[style.target];\n          if (objects) {\n            object = objects[0];\n            if (object && object.ui.viewData_[style.selector]) {\n              style.apply(this.object);\n            }\n          }\n        }\n      }\n      if (this.object.font) {\n        if (typeof (base = this.object.behavior).refresh === \"function\") {\n          base.refresh();\n        }\n      }\n    }\n    return null;\n  };\n\n\n  /**\n  * Updates the binding-handler.\n  * \n  * @method update\n   */\n\n  Component_UIBehavior.prototype.update = function() {\n    if (this.nextKeyObjectId && !this.nextKeyObject) {\n      return this.nextKeyObject = gs.ObjectManager.current.objectById(this.nextKeyObjectId);\n    }\n  };\n\n  return Component_UIBehavior;\n\n})(gs.Component);\n\nui.Component_UIBehavior = Component_UIBehavior;\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLElBQUEsb0JBQUE7RUFBQTs7O0FBQU07Ozs7QUFDRjs7Ozs7Ozs7O2lDQVFBLG1CQUFBLEdBQXFCLFNBQUMsSUFBRCxFQUFPLE9BQVA7V0FDakIsSUFBQyxDQUFBLGtCQUFELENBQUE7RUFEaUI7OztBQUdyQjs7Ozs7Ozs7RUFPYSw4QkFBQTtJQUNULElBQUMsQ0FBQSxZQUFELEdBQWdCO0lBQ2hCLElBQUMsQ0FBQSxlQUFELEdBQW1CO0lBQ25CLElBQUMsQ0FBQSxXQUFELEdBQWU7SUFDZixJQUFDLENBQUEsU0FBRCxHQUFhLENBQUMsSUFBRCxFQUFNLEtBQU4sRUFBVSxLQUFWLEVBQWMsSUFBZCxFQUFtQixLQUFuQjtJQUNiLElBQUMsQ0FBQSxlQUFELEdBQW1CO0lBQ25CLElBQUMsQ0FBQSxjQUFELEdBQWtCO0lBQ2xCLElBQUMsQ0FBQSxjQUFELEdBQWtCO0VBUFQ7O0VBU2Isb0JBQUMsQ0FBQSxTQUFELENBQVcsZUFBWCxFQUNJO0lBQUEsR0FBQSxFQUFLLFNBQUMsQ0FBRDtNQUNELElBQUMsQ0FBQSxjQUFELEdBQWtCO01BQ2xCLElBQUcsQ0FBSDtlQUNJLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBTCxHQUFzQixJQUFDLENBQUEsT0FEM0I7O0lBRkMsQ0FBTDtJQUlBLEdBQUEsRUFBSyxTQUFBO2FBQUcsSUFBQyxDQUFBO0lBQUosQ0FKTDtHQURKOztFQU9BLG9CQUFDLENBQUEsU0FBRCxDQUFXLGVBQVgsRUFDSTtJQUFBLEdBQUEsRUFBSyxTQUFDLENBQUQ7TUFDRCxJQUFDLENBQUEsY0FBRCxHQUFrQjtNQUNsQixJQUFHLENBQUg7ZUFDSSxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQUwsR0FBc0IsSUFBQyxDQUFBLE9BRDNCOztJQUZDLENBQUw7SUFJQSxHQUFBLEVBQUssU0FBQTthQUFHLElBQUMsQ0FBQTtJQUFKLENBSkw7R0FESjs7RUFPQSxv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QUFXLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBVSxDQUFBLEtBQUssQ0FBQyxRQUFOLENBQWxDO2NBQ0ksS0FBSyxDQUFDLEtBQU4sQ0FBWSxJQUFDLENBQUEsTUFBYixFQURKO2FBRko7V0FMSjs7QUFESjtNQVdBLElBQUcsSUFBQyxDQUFBLE1BQU0sQ0FBQyxJQUFYOztjQUNvQixDQUFDO1NBRHJCO09BaEJKOztBQW1CQSxXQUFPO0VBcEJFOzs7QUFzQmI7Ozs7OztpQ0FLQSxNQUFBLEdBQVEsU0FBQTtJQUNKLElBQUcsSUFBQyxDQUFBLGVBQUQsSUFBcUIsQ0FBQyxJQUFDLENBQUEsYUFBMUI7YUFDSSxJQUFDLENBQUEsYUFBRCxHQUFpQixFQUFFLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUF6QixDQUFvQyxJQUFDLENBQUEsZUFBckMsRUFEckI7O0VBREk7Ozs7R0F4VXVCLEVBQUUsQ0FBQzs7QUE2VXRDLEVBQUUsQ0FBQyxvQkFBSCxHQUEwQiIsInNvdXJjZXNDb250ZW50IjpbIiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuI1xuIyAgIFNjcmlwdDogQ29tcG9uZW50X1N0eWxlSGFuZGxlclxuI1xuIyAgICQkQ09QWVJJR0hUJCRcbiNcbiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuY2xhc3MgQ29tcG9uZW50X1VJQmVoYXZpb3IgZXh0ZW5kcyBncy5Db21wb25lbnRcbiAgICAjIyMqXG4gICAgKiBDYWxsZWQgaWYgdGhpcyBvYmplY3QgaW5zdGFuY2UgaXMgcmVzdG9yZWQgZnJvbSBhIGRhdGEtYnVuZGxlLiBJdCBjYW4gYmUgdXNlZFxuICAgICogcmUtYXNzaWduIGV2ZW50LWhhbmRsZXIsIGFub255bW91cyBmdW5jdGlvbnMsIGV0Yy5cbiAgICAqIFxuICAgICogQG1ldGhvZCBvbkRhdGFCdW5kbGVSZXN0b3JlLlxuICAgICogQHBhcmFtIE9iamVjdCBkYXRhIC0gVGhlIGRhdGEtYnVuZGxlXG4gICAgKiBAcGFyYW0gZ3MuT2JqZWN0Q29kZWNDb250ZXh0IGNvbnRleHQgLSBUaGUgY29kZWMtY29udGV4dC5cbiAgICAjIyNcbiAgICBvbkRhdGFCdW5kbGVSZXN0b3JlOiAoZGF0YSwgY29udGV4dCkgLT5cbiAgICAgICAgQHNldHVwRXZlbnRIYW5kbGVycygpXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIEBtb2R1bGUgdWlcbiAgICAqIEBjbGFzcyBDb21wb25lbnRfVUlCZWhhdmlvclxuICAgICogQGV4dGVuZHMgZ3MuQ29tcG9uZW50XG4gICAgKiBAbWVtYmVyb2YgdWlcbiAgICAqIEBjb25zdHJ1Y3RvclxuICAgICMjI1xuICAgIGNvbnN0cnVjdG9yOiAoKSAtPlxuICAgICAgICBAYnJlYWtDaGFpbkF0ID0gbnVsbFxuICAgICAgICBAY29udGFpbnNQb2ludGVyID0gbm9cbiAgICAgICAgQGlzQW5pbWF0aW5nID0gbm9cbiAgICAgICAgQHZpZXdEYXRhXyA9IFt5ZXMsIG5vLCBubywgeWVzLCBub11cbiAgICAgICAgQG5leHRLZXlPYmplY3RJZCA9IFwiXCJcbiAgICAgICAgQG5leHRLZXlPYmplY3RfID0gbnVsbFxuICAgICAgICBAcHJldktleU9iamVjdF8gPSBudWxsXG4gICAgICAgIFxuICAgIEBhY2Nlc3NvcnMgXCJuZXh0S2V5T2JqZWN0XCIsIFxuICAgICAgICBzZXQ6ICh2KSAtPlxuICAgICAgICAgICAgQG5leHRLZXlPYmplY3RfID0gdlxuICAgICAgICAgICAgaWYgdlxuICAgICAgICAgICAgICAgIHYudWkucHJldktleU9iamVjdF8gPSBAb2JqZWN0XG4gICAgICAgIGdldDogLT4gQG5leHRLZXlPYmplY3RfXG4gICAgICAgIFxuICAgIEBhY2Nlc3NvcnMgXCJwcmV2S2V5T2JqZWN0XCIsIFxuICAgICAgICBzZXQ6ICh2KSAtPlxuICAgICAgICAgICAgQHByZXZLZXlPYmplY3RfID0gdlxuICAgICAgICAgICAgaWYgdlxuICAgICAgICAgICAgICAgIHYudWkubmV4dEtleU9iamVjdF8gPSBAb2JqZWN0XG4gICAgICAgIGdldDogLT4gQHByZXZLZXlPYmplY3RfXG4gICAgICAgICAgICAgICAgXG4gICAgQGFjY2Vzc29ycyBcInNlbGVjdGVkXCIsIFxuICAgICAgICBzZXQ6ICh2KSAtPiBcbiAgICAgICAgICAgIGlmIHYgIT0gQHZpZXdEYXRhX1syXVxuICAgICAgICAgICAgICAgIEB2aWV3RGF0YV9bMl0gPSB2XG4gICAgICAgICAgICAgICAgQHVwZGF0ZVN0eWxlKClcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgZ2V0OiAtPiBAdmlld0RhdGFfWzJdXG4gICAgICAgIFxuICAgIEBhY2Nlc3NvcnMgXCJob3ZlclwiLCBcbiAgICAgICAgc2V0OiAodikgLT4gXG4gICAgICAgICAgICBpZiB2ICE9IEB2aWV3RGF0YV9bMV1cbiAgICAgICAgICAgICAgICBAdmlld0RhdGFfWzFdID0gdlxuICAgICAgICAgICAgICAgIEB1cGRhdGVTdHlsZSgpXG4gICAgICAgICAgICAgICAgXG4gICAgICAgIGdldDogLT4gQHZpZXdEYXRhX1sxXVxuICAgICAgICBcbiAgICBAYWNjZXNzb3JzIFwiZW5hYmxlZFwiLFxuICAgICAgICBzZXQ6ICh2KSAtPiBcbiAgICAgICAgICAgIGlmIHYgIT0gQHZpZXdEYXRhX1szXVxuICAgICAgICAgICAgICAgIEB2aWV3RGF0YV9bM10gPSB2XG4gICAgICAgICAgICAgICAgQHVwZGF0ZVN0eWxlKClcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgZ2V0OiAtPiBAdmlld0RhdGFfWzNdXG4gICAgICAgIFxuICAgIEBhY2Nlc3NvcnMgXCJmb2N1c2VkXCIsXG4gICAgICAgIHNldDogKHYpIC0+XG4gICAgICAgICAgICBpZiB2ICE9IEB2aWV3RGF0YV9bNF1cbiAgICAgICAgICAgICAgICBAdmlld0RhdGFfWzRdID0gdlxuICAgICAgICAgICAgICAgIEB1cGRhdGVTdHlsZSgpXG4gICAgICAgIGdldDogLT4gQHZpZXdEYXRhX1s0XVxuICAgICAgICBcbiAgICBAYWNjZXNzb3JzIFwidmlld0RhdGFcIixcbiAgICAgICAgc2V0OiAodikgLT5cbiAgICAgICAgICAgIGlmIHYgIT0gQHZpZXdEYXRhX1xuICAgICAgICAgICAgICAgIEB2aWV3RGF0YV8gPSB2XG4gICAgICAgICAgICAgICAgQHVwZGF0ZVN0eWxlKClcbiAgICAgICAgZ2V0OiAtPiBAdmlld0RhdGFfXG4gICAgXG4gICAgXG4gICAgIyMjKlxuICAgICogUHJlcGFyZXMgdGhlIFVJLU9iamVjdCBmb3IgZGlzcGxheS4gVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZFxuICAgICogYmVmb3JlIGEgbmV3IGNyZWF0ZWQgVUktT2JqZWN0IHdpbGwgYmUgZGlzcGxheWVkIHRvIHBvc2l0aW9uIGFsbFxuICAgICogc3ViLWVsZW1lbnRzIGNvcnJlY3RseS5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHByZXBhcmVcbiAgICAjIyNcbiAgICBwcmVwYXJlOiAtPlxuICAgICAgICBkZWJ1Z2dlclxuICAgICAgICBzY2VuZSA9IFNjZW5lTWFuYWdlci5zY2VuZVxuICAgICAgICBzY2VuZS5wcmVwYXJpbmcgPSB5ZXNcbiAgICAgICAgQG9iamVjdC51cGRhdGUoKSAjIEZpcnN0IFVwZGF0ZTogQnJpbmcgYWxsIHN1Yi1lbGVtZW50cyBpbiBjb3JyZWN0IHNpemVcbiAgICAgICAgQG9iamVjdC51cGRhdGUoKSAjIFNlY29uZCBVcGRhdGU6IENvcnJlY3QgbGF5b3V0XG4gICAgICAgIHNjZW5lLnByZXBhcmluZyA9IG5vXG4gICAgICAgIEBvYmplY3QuZXZlbnRzLmVtaXQoXCJ1aVByZXBhcmVGaW5pc2hcIilcbiAgICAgXG4gICAgIFxuICAgICMjIypcbiAgICAqIEV4ZWN1dGVzIGFuIGFuaW1hdGlvbiBkZWZpbmVkIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50LiBFYWNoIFVJLU9iamVjdFxuICAgICogY2FuIGhhdmUgYW5pbWF0aW9ucyBmb3IgY2VydGFpbiBldmVudHMgZGVmaW5lZCBpbiBKU09OLlxuICAgICpcbiAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCAtIFRoZSBldmVudCB0byBleGVjdXRlIHRoZSBhbmltYXRpb24gZm9yIHN1Y2ggYXMgXCJvblRlcm1pbmF0ZVwiIG9yIFwib25Jbml0aWFsaXplXCIuIElmXG4gICAgKiBubyBhbmltYXRpb24gaGFzIGJlZW4gZGVmaW5lZCBmb3IgdGhlIHNwZWNpZmllZCBldmVudCwgbm90aGluZyB3aWxsIGhhcHBlbiBhbmQgdGhlIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIFxuICAgICogaW1tZWRpYXRlbHkuXG4gICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBhbmltYXRpb24gZW5kcy5cbiAgICAqIEBtZXRob2QgZXhlY3V0ZUFuaW1hdGlvblxuICAgICMjI1xuICAgIGV4ZWN1dGVBbmltYXRpb246IChldmVudCwgY2FsbGJhY2spIC0+XG4gICAgICAgIEBpc0FuaW1hdGluZyA9IHllc1xuICAgICAgICBAZGlzYXBwZWFyQ291bnRlciA9IEBvYmplY3Quc3ViT2JqZWN0cy5sZW5ndGggKyAxXG4gICAgICAgIEBkaXNhcHBlYXJDYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgICAgIFxuICAgICAgICBmb3Igb2JqZWN0IGluIEBvYmplY3Quc3ViT2JqZWN0c1xuICAgICAgICAgICAgaWYgb2JqZWN0LnVpXG4gICAgICAgICAgICAgICAgb2JqZWN0LnVpLmV4ZWN1dGVBbmltYXRpb24oZXZlbnQsIChzZW5kZXIpID0+XG4gICAgICAgICAgICAgICAgICAgIEBkaXNhcHBlYXJDb3VudGVyLS1cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmIEBkaXNhcHBlYXJDb3VudGVyID09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpc0FuaW1hdGluZyA9IG5vXG4gICAgICAgICAgICAgICAgICAgICAgICBAZGlzYXBwZWFyQ2FsbGJhY2s/KEBvYmplY3QpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIEBkaXNhcHBlYXJDb3VudGVyLS1cbiAgICAgICAgIFxuICAgICAgICBhbmltYXRpb24gPSBAb2JqZWN0LmFuaW1hdGlvbnM/LmZpcnN0IChhKSAtPiBhLmV2ZW50cy5pbmRleE9mKGV2ZW50KSAhPSAtMVxuICAgICAgICBcbiAgICAgICAgaWYgYW5pbWF0aW9uXG4gICAgICAgICAgICBAb2JqZWN0LmFuaW1hdGlvbkV4ZWN1dG9yLmV4ZWN1dGUoYW5pbWF0aW9uLCAoc2VuZGVyKSA9PlxuICAgICAgICAgICAgICAgIEBkaXNhcHBlYXJDb3VudGVyLS1cbiAgICAgICAgICAgICAgICBpZiBAZGlzYXBwZWFyQ291bnRlciA9PSAwXG4gICAgICAgICAgICAgICAgICAgIEBpc0FuaW1hdGluZyA9IG5vXG4gICAgICAgICAgICAgICAgICAgIEBkaXNhcHBlYXJDYWxsYmFjaz8oQG9iamVjdCkgXG4gICAgICAgICAgICApXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIEBkaXNhcHBlYXJDb3VudGVyLS1cbiAgICAgICAgICAgIGlmIEBkaXNhcHBlYXJDb3VudGVyID09IDBcbiAgICAgICAgICAgICAgICBAaXNBbmltYXRpbmcgPSBub1xuICAgICAgICAgICAgICAgIEBkaXNhcHBlYXJDYWxsYmFjaz8oQG9iamVjdCkgXG4gICAgXG4gICAgIyMjKlxuICAgICogRXhlY3V0ZXMgdGhlIGFuaW1hdGlvbiBkZWZpbmVkIGZvciB0aGUgXCJvbkluaXRpYWxpemVcIiBldmVudC4gRWFjaCBVSS1PYmplY3RcbiAgICAqIGNhbiBoYXZlIGFuaW1hdGlvbnMgZm9yIGNlcnRhaW4gZXZlbnRzIGRlZmluZWQgaW4gSlNPTi5cbiAgICAqXG4gICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBhbmltYXRpb24gZW5kcy5cbiAgICAqIEBtZXRob2QgYXBwZWFyXG4gICAgIyMjICAgICAgICBcbiAgICBhcHBlYXI6IChjYWxsYmFjaykgLT4gXG4gICAgICAgIGdzLkdsb2JhbEV2ZW50TWFuYWdlci5lbWl0KFwidWlBbmltYXRpb25TdGFydFwiKVxuICAgICAgICBjYiA9IChzZW5kZXIpID0+IFxuICAgICAgICAgICAgZ3MuR2xvYmFsRXZlbnRNYW5hZ2VyLmVtaXQoXCJ1aUFuaW1hdGlvbkZpbmlzaFwiKVxuICAgICAgICAgICAgY2FsbGJhY2s/KHNlbmRlcilcbiAgICAgICAgQGV4ZWN1dGVBbmltYXRpb24oXCJvbkluaXRpYWxpemVcIiwgY2IpXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIEV4ZWN1dGVzIHRoZSBhbmltYXRpb24gZGVmaW5lZCBmb3IgdGhlIFwib25UZXJtaW5hdGVcIiBldmVudC4gRWFjaCBVSS1PYmplY3RcbiAgICAqIGNhbiBoYXZlIGFuaW1hdGlvbnMgZm9yIGNlcnRhaW4gZXZlbnRzIGRlZmluZWQgaW4gSlNPTi5cbiAgICAqXG4gICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAtIEFuIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBhbmltYXRpb24gZW5kcy5cbiAgICAqIEBtZXRob2QgZGlzYXBwZWFyXG4gICAgIyMjICAgIFxuICAgIGRpc2FwcGVhcjogKGNhbGxiYWNrKSAtPiBcbiAgICAgICAgZ3MuR2xvYmFsRXZlbnRNYW5hZ2VyLmVtaXQoXCJ1aUFuaW1hdGlvblN0YXJ0XCIpXG4gICAgICAgIGNiID0gKHNlbmRlcikgPT4gXG4gICAgICAgICAgICBncy5HbG9iYWxFdmVudE1hbmFnZXIuZW1pdChcInVpQW5pbWF0aW9uRmluaXNoXCIpXG4gICAgICAgICAgICBjYWxsYmFjaz8oc2VuZGVyKVxuICAgICAgICBAZXhlY3V0ZUFuaW1hdGlvbihcIm9uVGVybWluYXRlXCIsIGNiKVxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBEaXNwb3NlcyB0aGUgY29tcG9uZW50LlxuICAgICpcbiAgICAqIEBtZXRob2QgZGlzcG9zZVxuICAgICMjI1xuICAgIGRpc3Bvc2U6IC0+XG4gICAgICAgIHN1cGVyXG4gICAgICAgIFxuICAgICAgICBncy5HbG9iYWxFdmVudE1hbmFnZXIub2ZmQnlPd25lciBcIm1vdXNlVXBcIiwgQG9iamVjdFxuICAgICAgICBncy5HbG9iYWxFdmVudE1hbmFnZXIub2ZmQnlPd25lcihcIm9iamVjdEdvdEZvY3VzXCIsIEBvYmplY3QpXG4gICAgICAgIGdzLkdsb2JhbEV2ZW50TWFuYWdlci5vZmZCeU93bmVyKFwia2V5VXBcIiwgQG9iamVjdClcbiAgICAgICAgZ3MuR2xvYmFsRXZlbnRNYW5hZ2VyLm9mZkJ5T3duZXIoXCJtb3VzZURvd25cIiwgQG9iamVjdClcbiAgICAgICAgZ3MuR2xvYmFsRXZlbnRNYW5hZ2VyLm9mZkJ5T3duZXIoXCJtb3VzZU1vdmVkXCIsIEBvYmplY3QpXG4gICAgIFxuICAgICMjIypcbiAgICAqIEFkZHMgZXZlbnQtaGFuZGxlcnMgZm9yIG1vdXNlL3RvdWNoIGV2ZW50c1xuICAgICpcbiAgICAqIEBtZXRob2Qgc2V0dXBFdmVudEhhbmRsZXJzXG4gICAgIyMjIFxuICAgIHNldHVwRXZlbnRIYW5kbGVyczogLT5cbiAgICAgICAgaWYgQG9iamVjdC5mb2N1c2FibGVcbiAgICAgICAgICAgIGdzLkdsb2JhbEV2ZW50TWFuYWdlci5vbiBcIm9iamVjdEdvdEZvY3VzXCIsICgoZSkgPT5cbiAgICAgICAgICAgICAgICBpZiBlLnNlbmRlciAhPSBAb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgIEBibHVyKClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBudWxsLCBAb2JqZWN0XG5cbiAgICAgICAgICAgIGdzLkdsb2JhbEV2ZW50TWFuYWdlci5vbiBcImtleVVwXCIsICgoZSkgPT5cbiAgICAgICAgICAgICAgICBpZiBAZm9jdXNlZFxuICAgICAgICAgICAgICAgICAgICBpZiBAbmV4dEtleU9iamVjdCBhbmQgKElucHV0LnJlbGVhc2UoSW5wdXQuS0VZX0RPV04pIG9yIElucHV0LnJlbGVhc2UoSW5wdXQuS0VZX1JJR0hUKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIEBuZXh0S2V5T2JqZWN0LnVpLmZvY3VzKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuYnJlYWtDaGFpbiA9IHllc1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIEBwcmV2S2V5T2JqZWN0IGFuZCAoSW5wdXQucmVsZWFzZShJbnB1dC5LRVlfVVApIG9yIElucHV0LnJlbGVhc2UoSW5wdXQuS0VZX0xFRlQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgQHByZXZLZXlPYmplY3QudWkuZm9jdXMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgZS5icmVha0NoYWluID0geWVzXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbnVsbCwgQG9iamVjdFxuICAgICAgICAgICAgXG4gICAgICAgIGlmIEBvYmplY3Quc3R5bGVzLmZpcnN0ICgocykgLT4gcy5zZWxlY3RvciA9PSAxKVxuICAgICAgICAgICAgZ3MuR2xvYmFsRXZlbnRNYW5hZ2VyLm9uIFwibW91c2VNb3ZlZFwiLCAoKGUpID0+XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpZiAhQGVuYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgPSBSZWN0LmNvbnRhaW5zKEBvYmplY3QuZHN0UmVjdC54LCBAb2JqZWN0LmRzdFJlY3QueSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBvYmplY3QuZHN0UmVjdC53aWR0aCwgQG9iamVjdC5kc3RSZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXQuTW91c2UueCAtIEBvYmplY3Qub3JpZ2luLngsIElucHV0Lk1vdXNlLnkgLSBAb2JqZWN0Lm9yaWdpbi55KVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiBAY29udGFpbnNQb2ludGVyICE9IGNvbnRhaW5zIG9yIChAaG92ZXIgYW5kICFjb250YWlucylcbiAgICAgICAgICAgICAgICAgICAgICAgIEBjb250YWluc1BvaW50ZXIgPSBjb250YWluc1xuICAgICAgICAgICAgICAgICAgICAgICAgQG9iamVjdC5uZWVkc1VwZGF0ZSA9IHllc1xuICAgICAgICAgICAgICAgICAgICAgICAgQGhvdmVyID0gY29udGFpbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgQHVwZGF0ZVBhcmVudFN0eWxlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIEB1cGRhdGVDaGlsZHJlblN0eWxlKClcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGwgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgbnVsbCwgQG9iamVjdFxuICAgICAgICAgICAgXG4gICAgICAgIGlmIEBvYmplY3QuZm9jdXNhYmxlIG9yIEBvYmplY3Quc3R5bGVzLmZpcnN0ICgocykgLT4gcy5zZWxlY3RvciA9PSAyIHx8IHMuc2VsZWN0b3IgPT0gNClcbiAgICAgICAgICAgIGdzLkdsb2JhbEV2ZW50TWFuYWdlci5vbiBcIm1vdXNlRG93blwiLCAoKGUpID0+XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpZiAhQGVuYWJsZWQgb3IgSW5wdXQuTW91c2UuYnV0dG9uc1tJbnB1dC5Nb3VzZS5MRUZUXSAhPSAxXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zID0gUmVjdC5jb250YWlucyhAb2JqZWN0LmRzdFJlY3QueCwgQG9iamVjdC5kc3RSZWN0LnksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAb2JqZWN0LmRzdFJlY3Qud2lkdGgsIEBvYmplY3QuZHN0UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0Lk1vdXNlLnggLSBAb2JqZWN0Lm9yaWdpbi54LCBJbnB1dC5Nb3VzZS55IC0gQG9iamVjdC5vcmlnaW4ueSlcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmIGNvbnRhaW5zXG4gICAgICAgICAgICAgICAgICAgICAgICBAb2JqZWN0Lm5lZWRzVXBkYXRlID0geWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb2N1cygpXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIEBvYmplY3Quc2VsZWN0YWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIEBvYmplY3QuZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHNlbGVjdGVkID0geWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gZ3MuT2JqZWN0TWFuYWdlci5jdXJyZW50Lm9iamVjdHNCeUdyb3VwKEBvYmplY3QuZ3JvdXApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBvYmplY3QgaW4gZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9iamVjdCAhPSBAb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnVpLnNlbGVjdGVkID0gbm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzZWxlY3RlZCA9ICFAc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdXBkYXRlU3R5bGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgQHVwZGF0ZVBhcmVudFN0eWxlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGwgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIG51bGwsIEBvYmplY3QsIDBcbiAgICAgICAgICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBJbml0aWFsaXplcyB0aGUgYmluZGluZy1oYW5kbGVyLlxuICAgICogXG4gICAgKiBAbWV0aG9kIHNldHVwXG4gICAgIyMjXG4gICAgc2V0dXA6IC0+XG4gICAgICAgIEBzZXR1cEV2ZW50SGFuZGxlcnMoKVxuICAgIFxuICAgICMjIypcbiAgICAqIEdpdmVzIHRoZSBpbnB1dCBmb2N1cyB0byB0aGlzIFVJIG9iamVjdC4gSWYgdGhlIFVJIG9iamVjdCBpcyBub3QgZm9jdXNhYmxlLCBub3RoaW5nIHdpbGwgaGFwcGVuLlxuICAgICogXG4gICAgKiBAbWV0aG9kIGZvY3VzXG4gICAgIyMjICAgICAgICAgICAgICAgXG4gICAgZm9jdXM6IC0+XG4gICAgICAgIGlmIEBvYmplY3QuZm9jdXNhYmxlIGFuZCAhQGZvY3VzZWRcbiAgICAgICAgICAgIEBmb2N1c2VkID0geWVzXG4gICAgICAgICAgICBAdXBkYXRlQ2hpbGRyZW5TdHlsZSgpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGdzLkdsb2JhbEV2ZW50TWFuYWdlci5lbWl0KFwib2JqZWN0R290Rm9jdXNcIiwgQG9iamVjdClcbiAgICBcbiAgICAjIyMqXG4gICAgKiBSZW1vdmVzIHRoZSBpbnB1dCBmb2N1cyBmcm9tIHRoaXMgVUkgb2JqZWN0LiBJZiB0aGUgVUkgb2JqZWN0IGlzIG5vdCBmb2N1c2FibGUsIG5vdGhpbmcgd2lsbCBoYXBwZW4uXG4gICAgKiBcbiAgICAqIEBtZXRob2QgYmx1clxuICAgICMjI1xuICAgIGJsdXI6IC0+XG4gICAgICAgIGlmIEBvYmplY3QuZm9jdXNhYmxlIGFuZCBAZm9jdXNlZFxuICAgICAgICAgICAgQGZvY3VzZWQgPSBub1xuICAgICAgICAgICAgQHVwZGF0ZUNoaWxkcmVuU3R5bGUoKVxuICAgICAgICAgICAgZ3MuR2xvYmFsRXZlbnRNYW5hZ2VyLmVtaXQoXCJvYmplY3RMb3N0Rm9jdXNcIiwgQG9iamVjdClcbiAgICAgICAgICAgIFxuICAgIHVwZGF0ZVBhcmVudFN0eWxlOiAtPlxuICAgICAgICBwYXJlbnQgPSBAb2JqZWN0LnBhcmVudFxuICAgICAgICB3aGlsZSBwYXJlbnRcbiAgICAgICAgICAgIHBhcmVudC51aT8udXBkYXRlU3R5bGUoKVxuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudFxuICAgICAgICByZXR1cm4gbnVsbFxuICAgIFxuICAgIHVwZGF0ZUNoaWxkcmVuU3R5bGU6ICgpIC0+XG4gICAgICAgIGlmIEBvYmplY3QuY29udHJvbHNcbiAgICAgICAgICAgIGZvciBjb250cm9sIGluIEBvYmplY3QuY29udHJvbHNcbiAgICAgICAgICAgICAgICBpZiBjb250cm9sIGFuZCBjb250cm9sLnVpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wudWkudXBkYXRlU3R5bGUoKVxuICAgICAgICAgICAgICAgICAgICBjb250cm9sLnVpLnVwZGF0ZUNoaWxkcmVuU3R5bGUoKVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICBcbiAgICB1cGRhdGVTdHlsZTogLT5cbiAgICAgICAgaWYgQG9iamVjdC5zdHlsZXNcbiAgICAgICAgICAgIGZvciBzdHlsZSBpbiBAb2JqZWN0LnN0eWxlc1xuICAgICAgICAgICAgICAgIGlmICFAdmlld0RhdGFfW3N0eWxlLnNlbGVjdG9yXVxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5yZXZlcnQoQG9iamVjdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICBmb3Igc3R5bGUgaW4gQG9iamVjdC5zdHlsZXNcbiAgICAgICAgICAgICAgICBpZiBzdHlsZS50YXJnZXQgPT0gLTFcbiAgICAgICAgICAgICAgICAgICAgaWYgQHZpZXdEYXRhX1tzdHlsZS5zZWxlY3Rvcl1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLmFwcGx5KEBvYmplY3QpXG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBvYmplY3RzID0gQG9iamVjdC5wYXJlbnRzQnlTdHlsZVtzdHlsZS50YXJnZXRdXG4gICAgICAgICAgICAgICAgICAgIGlmIG9iamVjdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IG9iamVjdHNbMF1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9iamVjdCBhbmQgb2JqZWN0LnVpLnZpZXdEYXRhX1tzdHlsZS5zZWxlY3Rvcl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5hcHBseShAb2JqZWN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgQG9iamVjdC5mb250XG4gICAgICAgICAgICAgICAgQG9iamVjdC5iZWhhdmlvci5yZWZyZXNoPygpICMgRklYTUU6IENyZWF0ZXMgYSBkZXBlbmRlbmN5IG9uIFRleHQtQmVoYXZpb3JcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgXG4gICAgIyMjKlxuICAgICogVXBkYXRlcyB0aGUgYmluZGluZy1oYW5kbGVyLlxuICAgICogXG4gICAgKiBAbWV0aG9kIHVwZGF0ZVxuICAgICMjIyAgIFxuICAgIHVwZGF0ZTogLT5cbiAgICAgICAgaWYgQG5leHRLZXlPYmplY3RJZCBhbmQgIUBuZXh0S2V5T2JqZWN0XG4gICAgICAgICAgICBAbmV4dEtleU9iamVjdCA9IGdzLk9iamVjdE1hbmFnZXIuY3VycmVudC5vYmplY3RCeUlkKEBuZXh0S2V5T2JqZWN0SWQpXG4gICAgICAgIFxuICAgICBcbnVpLkNvbXBvbmVudF9VSUJlaGF2aW9yID0gQ29tcG9uZW50X1VJQmVoYXZpb3IiXX0=\n//# sourceURL=Component_UIBehavior_146.js"
    },
    "summary": [
        "name",
        "type"
    ]
}

Commits for Nextrek/s2s/data/5BCC16F29DC79547E53B16B76EC0822CB2E9.json

Diff revisions: vs.
Revision Author Commited Message
1086 Diff Diff ASorrentino picture ASorrentino Fri 11 May, 2018 21:50:37 +0000
1084 MOliva picture MOliva Fri 11 May, 2018 12:41:55 +0000