Subversion Repository Public Repository

Nextrek

1
{"uid":"BF1FEA5EK5664A49F7S92A5E94D58BE44A4A","isLoaded":true,"lastModificationTime":1427731012686,"items":{"name":"Component_FrameAnimation","type":"game_script","order":8,"content":"# ===================================================================\n#\n#   Script: Component_FrameAnimation\n#\n#   $$COPYRIGHT$$\n#\n# ===================================================================\n# FIXME: This class still follows deprecated rules, should be fixed.\nclass Component_FrameAnimation extends gs.Component_Animation\n    ###*\n    * Executes a classic image-frame animation defined in Database. The image in regular\n    * contains multiple sub-images (frames) which are then animated\n    * by modifying the <b>srcRect</b> property of the game object.\n    *\n    * @module gs\n    * @class Component_FrameAnimation\n    * @extends gs.Component_Animation\n    * @memberof gs\n    * @constructor\n    * @param {Object} record - The animation database-record.\n    ###\n    constructor: (record) ->\n        super\n        \n        ###*\n        * The database record.\n        * @property record\n        * @type Object\n        ###\n        @record = null\n        \n        ###*\n        * The name of the animation defined in Database.\n        * @property name\n        * @type string\n        ###\n        @name = null\n        \n        ###*\n        * The amount of frames on x-axis.\n        * @property framesX\n        * @type number\n        ###\n        @framesX = 1\n        \n        ###*\n        * The amount of frames on y-axis.\n        * @property framesY\n        * @type number\n        ###\n        @framesY = 1\n        \n        ###*\n        * The frame-range to animation like only Frame 4 - 6 for example.\n        * @property frameRange\n        * @type gs.Range\n        ###\n        @frameRange = { start: 0, end: 0 }\n        \n        ###*\n        * The frame-range used if the animation gets repeated.\n        * @property repetitionFrameRange\n        * @type gs.Range\n        ###\n        @repetitionFrameRange = @frameRange\n        \n        ###*\n        * The amount of frames to animate.\n        * @property frameCount\n        * @type number\n        * @protected\n        ###\n        @frameCount = 1\n        \n        ###*\n        * The graphic used as image for the animation.\n        * @property graphic\n        * @type Object\n        ###\n        @graphic = null\n        \n        ###*\n        * Indicates if the animation repeats.\n        * @property repeat\n        * @type boolean\n        ###\n        @repeat = no\n        \n        ###*\n        * The position of the animation on the target-object.\n        * @property framesY\n        * @type gs.AnimationPosition\n        ###\n        @position = 0\n\n        ###*\n        * The duration of a single frame.\n        * @property frameDuration\n        * @type number\n        * @protected\n        ###\n        @frameDuration = 10\n        \n        ###*\n        * A frame-counter needed for animation-process.\n        * @property frameDuration\n        * @type number\n        * @protected\n        ###\n        @frameCounter = 0\n        \n        ###*\n        * The duration of the animation.\n        * @property frameDuration\n        * @type number\n        ###\n        @duration = 10\n        \n        ###*\n        * Indicates if the animation is currently running.\n        * @property isRunning\n        * @type boolean\n        ###\n        @isRunning = no\n        \n        ###*\n        * Stores frame/pattern-offset.\n        * @property patternOffset\n        * @type number\n        * @protected\n        ###\n        @patternOffset = @frameRange.start\n        \n        ###*\n        * Stores current frame/pattern\n        * @property patternOffset\n        * @type number\n        * @protected\n        ###\n        @pattern = @patternOffset\n        \n        ###*\n        * Indicates if its still the first run of the animation.\n        * @property firstRun\n        * @type boolean\n        * @protected\n        ###\n        @firstRun = yes\n        \n        if record?\n            @refresh(record)\n            @start()\n     \n    ###*\n    * Serializes the frame-animation into a data-bundle.\n    *\n    * @method toDataBundle\n    ###   \n    toDataBundle: ->\n        name: @name,\n        framesX: @framesX,\n        framesY: @framesY,\n        frameRange: @frameRange,\n        repetitionFrameRange: @repetitionFrameRange,\n        frameCount: @frameCount,\n        graphic: @graphic,\n        repeat: @repeat,\n        position: @position,\n        frameDuration: @frameDuration,\n        frameCounter: @frameCounter,\n        duration: @duration,\n        isRunning: @isRunning,\n        patternOffset: @patternOffset,\n        pattern: @pattern,\n        firstRun: @firstRun\n     \n    ###*\n    * Refreshes the animation from the specified database-record.\n    *\n    * @method refresh\n    * @param {Object} record - The animation database-record.\n    ###  \n    # FIXME: Is that method still in use?\n    refresh: (record) ->\n        ###*\n        * The images to animate through.\n        * @property images\n        * @type string[]\n        ###\n        @name = record.name\n        @framesX = record.framesX || 1\n        @framesY = record.framesY || 1\n        @frameRange = { start: Math.min(record.frameRange.start, record.frameRange.end), end: Math.max(record.frameRange.start, record.frameRange.end) }\n        @repetitionFrameRange = if record.useRepetitionFrameRange and record.repetitionFrameRange? then record.repetitionFrameRange else @frameRange\n        @frameCount = (@frameRange.end - @frameRange.start) + 1\n        @graphic = record.graphic\n        @repeat = record.repeat || no\n        @position = record.position\n\n        @frameDuration = if record.duration? then Math.round(record.duration / @frameCount) else 10\n        @frameCounter = 0\n        @duration = record.duration || 10\n        @isRunning = no\n        @patternOffset = @frameRange.start\n        @pattern = @patternOffset\n        @firstRun = yes\n        \n    ###*\n    * Starts the frame-animation.\n    *\n    * @method start\n    ###   \n    start: (callback) ->\n        @callback = callback\n        @isRunning = yes\n        @firstRun = yes\n        @frameCounter = 0\n        @frameCount = (@frameRange.end - @frameRange.start) + 1\n        @frameDuration = Math.round(@duration / @frameCount)\n        @patternOffset = @frameRange.start\n        \n    ###*\n    * Updates the frame-animation.\n    *\n    * @method update\n    ###\n    update: ->\n        super\n        if not @isRunning then return\n        \n        if @frameCounter >= @duration\n            if @repeat\n                @firstRun = no\n                @frameCounter = 0\n                @frameCount = (@repetitionFrameRange.end - @repetitionFrameRange.start) + 1\n                @frameDuration = Math.ceil(@duration / @frameCount)\n                @patternOffset = @repetitionFrameRange.start\n            else\n                @isRunning = no\n                @onFinish?(this)\n                @callback?(@object, this)\n                return\n\n        @pattern = @patternOffset + Math.floor(@frameCounter / @frameDuration) \n        @frameCounter++\n        \n        if @object?\n            bitmap = @object.bitmap || ResourceManager.getBitmap(\"#{@object.imageFolder||\"Graphics/Pictures\"}/#{@object.image}\")\n            \n            if bitmap?\n                frameWidth = Math.floor(bitmap.width / @framesX)\n                frameHeight = Math.floor(bitmap.height / @framesY)\n                column = @pattern % @framesX\n                row = Math.floor(@pattern / @framesX)\n                @object.srcRect.set(column * frameWidth, row * frameHeight, frameWidth, frameHeight)\n                @object.dstRect.width = @object.srcRect.width\n                @object.dstRect.height = @object.srcRect.height\n                \n\nwindow.Component_FrameAnimation = Component_FrameAnimation\ngs.Component_FrameAnimation = Component_FrameAnimation","compiledContent":"var Component_FrameAnimation,\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_FrameAnimation = (function(superClass) {\n  extend(Component_FrameAnimation, superClass);\n\n\n  /**\n  * Executes a classic image-frame animation defined in Database. The image in regular\n  * contains multiple sub-images (frames) which are then animated\n  * by modifying the <b>srcRect</b> property of the game object.\n  *\n  * @module gs\n  * @class Component_FrameAnimation\n  * @extends gs.Component_Animation\n  * @memberof gs\n  * @constructor\n  * @param {Object} record - The animation database-record.\n   */\n\n  function Component_FrameAnimation(record) {\n    Component_FrameAnimation.__super__.constructor.apply(this, arguments);\n\n    /**\n    * The database record.\n    * @property record\n    * @type Object\n     */\n    this.record = null;\n\n    /**\n    * The name of the animation defined in Database.\n    * @property name\n    * @type string\n     */\n    this.name = null;\n\n    /**\n    * The amount of frames on x-axis.\n    * @property framesX\n    * @type number\n     */\n    this.framesX = 1;\n\n    /**\n    * The amount of frames on y-axis.\n    * @property framesY\n    * @type number\n     */\n    this.framesY = 1;\n\n    /**\n    * The frame-range to animation like only Frame 4 - 6 for example.\n    * @property frameRange\n    * @type gs.Range\n     */\n    this.frameRange = {\n      start: 0,\n      end: 0\n    };\n\n    /**\n    * The frame-range used if the animation gets repeated.\n    * @property repetitionFrameRange\n    * @type gs.Range\n     */\n    this.repetitionFrameRange = this.frameRange;\n\n    /**\n    * The amount of frames to animate.\n    * @property frameCount\n    * @type number\n    * @protected\n     */\n    this.frameCount = 1;\n\n    /**\n    * The graphic used as image for the animation.\n    * @property graphic\n    * @type Object\n     */\n    this.graphic = null;\n\n    /**\n    * Indicates if the animation repeats.\n    * @property repeat\n    * @type boolean\n     */\n    this.repeat = false;\n\n    /**\n    * The position of the animation on the target-object.\n    * @property framesY\n    * @type gs.AnimationPosition\n     */\n    this.position = 0;\n\n    /**\n    * The duration of a single frame.\n    * @property frameDuration\n    * @type number\n    * @protected\n     */\n    this.frameDuration = 10;\n\n    /**\n    * A frame-counter needed for animation-process.\n    * @property frameDuration\n    * @type number\n    * @protected\n     */\n    this.frameCounter = 0;\n\n    /**\n    * The duration of the animation.\n    * @property frameDuration\n    * @type number\n     */\n    this.duration = 10;\n\n    /**\n    * Indicates if the animation is currently running.\n    * @property isRunning\n    * @type boolean\n     */\n    this.isRunning = false;\n\n    /**\n    * Stores frame/pattern-offset.\n    * @property patternOffset\n    * @type number\n    * @protected\n     */\n    this.patternOffset = this.frameRange.start;\n\n    /**\n    * Stores current frame/pattern\n    * @property patternOffset\n    * @type number\n    * @protected\n     */\n    this.pattern = this.patternOffset;\n\n    /**\n    * Indicates if its still the first run of the animation.\n    * @property firstRun\n    * @type boolean\n    * @protected\n     */\n    this.firstRun = true;\n    if (record != null) {\n      this.refresh(record);\n      this.start();\n    }\n  }\n\n\n  /**\n  * Serializes the frame-animation into a data-bundle.\n  *\n  * @method toDataBundle\n   */\n\n  Component_FrameAnimation.prototype.toDataBundle = function() {\n    return {\n      name: this.name,\n      framesX: this.framesX,\n      framesY: this.framesY,\n      frameRange: this.frameRange,\n      repetitionFrameRange: this.repetitionFrameRange,\n      frameCount: this.frameCount,\n      graphic: this.graphic,\n      repeat: this.repeat,\n      position: this.position,\n      frameDuration: this.frameDuration,\n      frameCounter: this.frameCounter,\n      duration: this.duration,\n      isRunning: this.isRunning,\n      patternOffset: this.patternOffset,\n      pattern: this.pattern,\n      firstRun: this.firstRun\n    };\n  };\n\n\n  /**\n  * Refreshes the animation from the specified database-record.\n  *\n  * @method refresh\n  * @param {Object} record - The animation database-record.\n   */\n\n  Component_FrameAnimation.prototype.refresh = function(record) {\n\n    /**\n    * The images to animate through.\n    * @property images\n    * @type string[]\n     */\n    this.name = record.name;\n    this.framesX = record.framesX || 1;\n    this.framesY = record.framesY || 1;\n    this.frameRange = {\n      start: Math.min(record.frameRange.start, record.frameRange.end),\n      end: Math.max(record.frameRange.start, record.frameRange.end)\n    };\n    this.repetitionFrameRange = record.useRepetitionFrameRange && (record.repetitionFrameRange != null) ? record.repetitionFrameRange : this.frameRange;\n    this.frameCount = (this.frameRange.end - this.frameRange.start) + 1;\n    this.graphic = record.graphic;\n    this.repeat = record.repeat || false;\n    this.position = record.position;\n    this.frameDuration = record.duration != null ? Math.round(record.duration / this.frameCount) : 10;\n    this.frameCounter = 0;\n    this.duration = record.duration || 10;\n    this.isRunning = false;\n    this.patternOffset = this.frameRange.start;\n    this.pattern = this.patternOffset;\n    return this.firstRun = true;\n  };\n\n\n  /**\n  * Starts the frame-animation.\n  *\n  * @method start\n   */\n\n  Component_FrameAnimation.prototype.start = function(callback) {\n    this.callback = callback;\n    this.isRunning = true;\n    this.firstRun = true;\n    this.frameCounter = 0;\n    this.frameCount = (this.frameRange.end - this.frameRange.start) + 1;\n    this.frameDuration = Math.round(this.duration / this.frameCount);\n    return this.patternOffset = this.frameRange.start;\n  };\n\n\n  /**\n  * Updates the frame-animation.\n  *\n  * @method update\n   */\n\n  Component_FrameAnimation.prototype.update = function() {\n    var bitmap, column, frameHeight, frameWidth, row;\n    Component_FrameAnimation.__super__.update.apply(this, arguments);\n    if (!this.isRunning) {\n      return;\n    }\n    if (this.frameCounter >= this.duration) {\n      if (this.repeat) {\n        this.firstRun = false;\n        this.frameCounter = 0;\n        this.frameCount = (this.repetitionFrameRange.end - this.repetitionFrameRange.start) + 1;\n        this.frameDuration = Math.ceil(this.duration / this.frameCount);\n        this.patternOffset = this.repetitionFrameRange.start;\n      } else {\n        this.isRunning = false;\n        if (typeof this.onFinish === \"function\") {\n          this.onFinish(this);\n        }\n        if (typeof this.callback === \"function\") {\n          this.callback(this.object, this);\n        }\n        return;\n      }\n    }\n    this.pattern = this.patternOffset + Math.floor(this.frameCounter / this.frameDuration);\n    this.frameCounter++;\n    if (this.object != null) {\n      bitmap = this.object.bitmap || ResourceManager.getBitmap((this.object.imageFolder || \"Graphics/Pictures\") + \"/\" + this.object.image);\n      if (bitmap != null) {\n        frameWidth = Math.floor(bitmap.width / this.framesX);\n        frameHeight = Math.floor(bitmap.height / this.framesY);\n        column = this.pattern % this.framesX;\n        row = Math.floor(this.pattern / this.framesX);\n        this.object.srcRect.set(column * frameWidth, row * frameHeight, frameWidth, frameHeight);\n        this.object.dstRect.width = this.object.srcRect.width;\n        return this.object.dstRect.height = this.object.srcRect.height;\n      }\n    }\n  };\n\n  return Component_FrameAnimation;\n\n})(gs.Component_Animation);\n\nwindow.Component_FrameAnimation = Component_FrameAnimation;\n\ngs.Component_FrameAnimation = Component_FrameAnimation;\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLElBQUEsd0JBQUE7RUFBQTs7O0FBQU07Ozs7QUFDRjs7Ozs7Ozs7Ozs7OztFQVlhLGtDQUFDLE1BQUQ7SUFDVCwyREFBQSxTQUFBOztBQUVBOzs7OztJQUtBLElBQUMsQ0FBQSxNQUFELEdBQVU7O0FBRVY7Ozs7O0lBS0EsSUFBQyxDQUFBLElBQUQsR0FBUTs7QUFFUjs7Ozs7SUFLQSxJQUFDLENBQUEsT0FBRCxHQUFXOztBQUVYOzs7OztJQUtBLElBQUMsQ0FBQSxPQUFELEdBQVc7O0FBRVg7Ozs7O0lBS0EsSUFBQyxDQUFBLFVBQUQsR0FBYztNQUFFLEtBQUEsRUFBTyxDQUFUO01BQVksR0FBQSxFQUFLLENBQWpCOzs7QUFFZDs7Ozs7SUFLQSxJQUFDLENBQUEsb0JBQUQsR0FBd0IsSUFBQyxDQUFBOztBQUV6Qjs7Ozs7O0lBTUEsSUFBQyxDQUFBLFVBQUQsR0FBYzs7QUFFZDs7Ozs7SUFLQSxJQUFDLENBQUEsT0FBRCxHQUFXOztBQUVYOzs7OztJQUtBLElBQUMsQ0FBQSxNQUFELEdBQVU7O0FBRVY7Ozs7O0lBS0EsSUFBQyxDQUFBLFFBQUQsR0FBWTs7QUFFWjs7Ozs7O0lBTUEsSUFBQyxDQUFBLGFBQUQsR0FBaUI7O0FBRWpCOzs7Ozs7SUFNQSxJQUFDLENBQUEsWUFBRCxHQUFnQjs7QUFFaEI7Ozs7O0lBS0EsSUFBQyxDQUFBLFFBQUQsR0FBWTs7QUFFWjs7Ozs7SUFLQSxJQUFDLENBQUEsU0FBRCxHQUFhOztBQUViOzs7Ozs7SUFNQSxJQUFDLENBQUEsYUFBRCxHQUFpQixJQUFDLENBQUEsVUFBVSxDQUFDOztBQUU3Qjs7Ozs7O0lBTUEsSUFBQyxDQUFBLE9BQUQsR0FBVyxJQUFDLENBQUE7O0FBRVo7Ozs7OztJQU1BLElBQUMsQ0FBQSxRQUFELEdBQVk7SUFFWixJQUFHLGNBQUg7TUFDSSxJQUFDLENBQUEsT0FBRCxDQUFTLE1BQVQ7TUFDQSxJ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QSxHQUFTLElBQUMsQ0FBQSxNQUFNLENBQUMsTUFBUixJQUFrQixlQUFlLENBQUMsU0FBaEIsQ0FBNEIsQ0FBQyxJQUFDLENBQUEsTUFBTSxDQUFDLFdBQVIsSUFBcUIsbUJBQXRCLENBQUEsR0FBMEMsR0FBMUMsR0FBNkMsSUFBQyxDQUFBLE1BQU0sQ0FBQyxLQUFqRjtNQUUzQixJQUFHLGNBQUg7UUFDSSxVQUFBLEdBQWEsSUFBSSxDQUFDLEtBQUwsQ0FBVyxNQUFNLENBQUMsS0FBUCxHQUFlLElBQUMsQ0FBQSxPQUEzQjtRQUNiLFdBQUEsR0FBYyxJQUFJLENBQUMsS0FBTCxDQUFXLE1BQU0sQ0FBQyxNQUFQLEdBQWdCLElBQUMsQ0FBQSxPQUE1QjtRQUNkLE1BQUEsR0FBUyxJQUFDLENBQUEsT0FBRCxHQUFXLElBQUMsQ0FBQTtRQUNyQixHQUFBLEdBQU0sSUFBSSxDQUFDLEtBQUwsQ0FBVyxJQUFDLENBQUEsT0FBRCxHQUFXLElBQUMsQ0FBQSxPQUF2QjtRQUNOLElBQUMsQ0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQWhCLENBQW9CLE1BQUEsR0FBUyxVQUE3QixFQUF5QyxHQUFBLEdBQU0sV0FBL0MsRUFBNEQsVUFBNUQsRUFBd0UsV0FBeEU7UUFDQSxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFoQixHQUF3QixJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQztlQUN4QyxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFoQixHQUF5QixJQUFDLENBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQVA3QztPQUhKOztFQXBCSTs7OztHQTFOMkIsRUFBRSxDQUFDOztBQTJQMUMsTUFBTSxDQUFDLHdCQUFQLEdBQWtDOztBQUNsQyxFQUFFLENBQUMsd0JBQUgsR0FBOEIiLCJzb3VyY2VzQ29udGVudCI6WyIjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiNcbiMgICBTY3JpcHQ6IENvbXBvbmVudF9GcmFtZUFuaW1hdGlvblxuI1xuIyAgICQkQ09QWVJJR0hUJCRcbiNcbiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIyBGSVhNRTogVGhpcyBjbGFzcyBzdGlsbCBmb2xsb3dzIGRlcHJlY2F0ZWQgcnVsZXMsIHNob3VsZCBiZSBmaXhlZC5cbmNsYXNzIENvbXBvbmVudF9GcmFtZUFuaW1hdGlvbiBleHRlbmRzIGdzLkNvbXBvbmVudF9BbmltYXRpb25cbiAgICAjIyMqXG4gICAgKiBFeGVjdXRlcyBhIGNsYXNzaWMgaW1hZ2UtZnJhbWUgYW5pbWF0aW9uIGRlZmluZWQgaW4gRGF0YWJhc2UuIFRoZSBpbWFnZSBpbiByZWd1bGFyXG4gICAgKiBjb250YWlucyBtdWx0aXBsZSBzdWItaW1hZ2VzIChmcmFtZXMpIHdoaWNoIGFyZSB0aGVuIGFuaW1hdGVkXG4gICAgKiBieSBtb2RpZnlpbmcgdGhlIDxiPnNyY1JlY3Q8L2I+IHByb3BlcnR5IG9mIHRoZSBnYW1lIG9iamVjdC5cbiAgICAqXG4gICAgKiBAbW9kdWxlIGdzXG4gICAgKiBAY2xhc3MgQ29tcG9uZW50X0ZyYW1lQW5pbWF0aW9uXG4gICAgKiBAZXh0ZW5kcyBncy5Db21wb25lbnRfQW5pbWF0aW9uXG4gICAgKiBAbWVtYmVyb2YgZ3NcbiAgICAqIEBjb25zdHJ1Y3RvclxuICAgICogQHBhcmFtIHtPYmplY3R9IHJlY29yZCAtIFRoZSBhbmltYXRpb24gZGF0YWJhc2UtcmVjb3JkLlxuICAgICMjI1xuICAgIGNvbnN0cnVjdG9yOiAocmVjb3JkKSAtPlxuICAgICAgICBzdXBlclxuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIFRoZSBkYXRhYmFzZSByZWNvcmQuXG4gICAgICAgICogQHByb3BlcnR5IHJlY29yZFxuICAgICAgICAqIEB0eXBlIE9iamVjdFxuICAgICAgICAjIyNcbiAgICAgICAgQHJlY29yZCA9IG51bGxcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgYW5pbWF0aW9uIGRlZmluZWQgaW4gRGF0YWJhc2UuXG4gICAgICAgICogQHByb3BlcnR5IG5hbWVcbiAgICAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgICAgIyMjXG4gICAgICAgIEBuYW1lID0gbnVsbFxuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIFRoZSBhbW91bnQgb2YgZnJhbWVzIG9uIHgtYXhpcy5cbiAgICAgICAgKiBAcHJvcGVydHkgZnJhbWVzWFxuICAgICAgICAqIEB0eXBlIG51bWJlclxuICAgICAgICAjIyNcbiAgICAgICAgQGZyYW1lc1ggPSAxXG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogVGhlIGFtb3VudCBvZiBmcmFtZXMgb24geS1heGlzLlxuICAgICAgICAqIEBwcm9wZXJ0eSBmcmFtZXNZXG4gICAgICAgICogQHR5cGUgbnVtYmVyXG4gICAgICAgICMjI1xuICAgICAgICBAZnJhbWVzWSA9IDFcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgZnJhbWUtcmFuZ2UgdG8gYW5pbWF0aW9uIGxpa2Ugb25seSBGcmFtZSA0IC0gNiBmb3IgZXhhbXBsZS5cbiAgICAgICAgKiBAcHJvcGVydHkgZnJhbWVSYW5nZVxuICAgICAgICAqIEB0eXBlIGdzLlJhbmdlXG4gICAgICAgICMjI1xuICAgICAgICBAZnJhbWVSYW5nZSA9IHsgc3RhcnQ6IDAsIGVuZDogMCB9XG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogVGhlIGZyYW1lLXJhbmdlIHVzZWQgaWYgdGhlIGFuaW1hdGlvbiBnZXRzIHJlcGVhdGVkLlxuICAgICAgICAqIEBwcm9wZXJ0eSByZXBldGl0aW9uRnJhbWVSYW5nZVxuICAgICAgICAqIEB0eXBlIGdzLlJhbmdlXG4gICAgICAgICMjI1xuICAgICAgICBAcmVwZXRpdGlvbkZyYW1lUmFuZ2UgPSBAZnJhbWVSYW5nZVxuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIFRoZSBhbW91bnQgb2YgZnJhbWVzIHRvIGFuaW1hdGUuXG4gICAgICAgICogQHByb3BlcnR5IGZyYW1lQ291bnRcbiAgICAgICAgKiBAdHlwZSBudW1iZXJcbiAgICAgICAgKiBAcHJvdGVjdGVkXG4gICAgICAgICMjI1xuICAgICAgICBAZnJhbWVDb3VudCA9IDFcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgZ3JhcGhpYyB1c2VkIGFzIGltYWdlIGZvciB0aGUgYW5pbWF0aW9uLlxuICAgICAgICAqIEBwcm9wZXJ0eSBncmFwaGljXG4gICAgICAgICogQHR5cGUgT2JqZWN0XG4gICAgICAgICMjI1xuICAgICAgICBAZ3JhcGhpYyA9IG51bGxcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGFuaW1hdGlvbiByZXBlYXRzLlxuICAgICAgICAqIEBwcm9wZXJ0eSByZXBlYXRcbiAgICAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICAgICMjI1xuICAgICAgICBAcmVwZWF0ID0gbm9cbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGFuaW1hdGlvbiBvbiB0aGUgdGFyZ2V0LW9iamVjdC5cbiAgICAgICAgKiBAcHJvcGVydHkgZnJhbWVzWVxuICAgICAgICAqIEB0eXBlIGdzLkFuaW1hdGlvblBvc2l0aW9uXG4gICAgICAgICMjI1xuICAgICAgICBAcG9zaXRpb24gPSAwXG5cbiAgICAgICAgIyMjKlxuICAgICAgICAqIFRoZSBkdXJhdGlvbiBvZiBhIHNpbmdsZSBmcmFtZS5cbiAgICAgICAgKiBAcHJvcGVydHkgZnJhbWVEdXJhdGlvblxuICAgICAgICAqIEB0eXBlIG51bWJlclxuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgIyMjXG4gICAgICAgIEBmcmFtZUR1cmF0aW9uID0gMTBcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBBIGZyYW1lLWNvdW50ZXIgbmVlZGVkIGZvciBhbmltYXRpb24tcHJvY2Vzcy5cbiAgICAgICAgKiBAcHJvcGVydHkgZnJhbWVEdXJhdGlvblxuICAgICAgICAqIEB0eXBlIG51bWJlclxuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgIyMjXG4gICAgICAgIEBmcmFtZUNvdW50ZXIgPSAwXG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogVGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24uXG4gICAgICAgICogQHByb3BlcnR5IGZyYW1lRHVyYXRpb25cbiAgICAgICAgKiBAdHlwZSBudW1iZXJcbiAgICAgICAgIyMjXG4gICAgICAgIEBkdXJhdGlvbiA9IDEwXG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogSW5kaWNhdGVzIGlmIHRoZSBhbmltYXRpb24gaXMgY3VycmVudGx5IHJ1bm5pbmcuXG4gICAgICAgICogQHByb3BlcnR5IGlzUnVubmluZ1xuICAgICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgICAgIyMjXG4gICAgICAgIEBpc1J1bm5pbmcgPSBub1xuICAgICAgICBcbiAgICAgICAgIyMjKlxuICAgICAgICAqIFN0b3JlcyBmcmFtZS9wYXR0ZXJuLW9mZnNldC5cbiAgICAgICAgKiBAcHJvcGVydHkgcGF0dGVybk9mZnNldFxuICAgICAgICAqIEB0eXBlIG51bWJlclxuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgIyMjXG4gICAgICAgIEBwYXR0ZXJuT2Zmc2V0ID0gQGZyYW1lUmFuZ2Uuc3RhcnRcbiAgICAgICAgXG4gICAgICAgICMjIypcbiAgICAgICAgKiBTdG9yZXMgY3VycmVudCBmcmFtZS9wYXR0ZXJuXG4gICAgICAgICogQHByb3BlcnR5IHBhdHRlcm5PZmZzZXRcbiAgICAgICAgKiBAdHlwZSBudW1iZXJcbiAgICAgICAgKiBAcHJvdGVjdGVkXG4gICAgICAgICMjI1xuICAgICAgICBAcGF0dGVybiA9IEBwYXR0ZXJuT2Zmc2V0XG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogSW5kaWNhdGVzIGlmIGl0cyBzdGlsbCB0aGUgZmlyc3QgcnVuIG9mIHRoZSBhbmltYXRpb24uXG4gICAgICAgICogQHByb3BlcnR5IGZpcnN0UnVuXG4gICAgICAgICogQHR5cGUgYm9vbGVhblxuICAgICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgICAgIyMjXG4gICAgICAgIEBmaXJzdFJ1biA9IHllc1xuICAgICAgICBcbiAgICAgICAgaWYgcmVjb3JkP1xuICAgICAgICAgICAgQHJlZnJlc2gocmVjb3JkKVxuICAgICAgICAgICAgQHN0YXJ0KClcbiAgICAgXG4gICAgIyMjKlxuICAgICogU2VyaWFsaXplcyB0aGUgZnJhbWUtYW5pbWF0aW9uIGludG8gYSBkYXRhLWJ1bmRsZS5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHRvRGF0YUJ1bmRsZVxuICAgICMjIyAgIFxuICAgIHRvRGF0YUJ1bmRsZTogLT5cbiAgICAgICAgbmFtZTogQG5hbWUsXG4gICAgICAgIGZyYW1lc1g6IEBmcmFtZXNYLFxuICAgICAgICBmcmFtZXNZOiBAZnJhbWVzWSxcbiAgICAgICAgZnJhbWVSYW5nZTogQGZyYW1lUmFuZ2UsXG4gICAgICAgIHJlcGV0aXRpb25GcmFtZVJhbmdlOiBAcmVwZXRpdGlvbkZyYW1lUmFuZ2UsXG4gICAgICAgIGZyYW1lQ291bnQ6IEBmcmFtZUNvdW50LFxuICAgICAgICBncmFwaGljOiBAZ3JhcGhpYyxcbiAgICAgICAgcmVwZWF0OiBAcmVwZWF0LFxuICAgICAgICBwb3NpdGlvbjogQHBvc2l0aW9uLFxuICAgICAgICBmcmFtZUR1cmF0aW9uOiBAZnJhbWVEdXJhdGlvbixcbiAgICAgICAgZnJhbWVDb3VudGVyOiBAZnJhbWVDb3VudGVyLFxuICAgICAgICBkdXJhdGlvbjogQGR1cmF0aW9uLFxuICAgICAgICBpc1J1bm5pbmc6IEBpc1J1bm5pbmcsXG4gICAgICAgIHBhdHRlcm5PZmZzZXQ6IEBwYXR0ZXJuT2Zmc2V0LFxuICAgICAgICBwYXR0ZXJuOiBAcGF0dGVybixcbiAgICAgICAgZmlyc3RSdW46IEBmaXJzdFJ1blxuICAgICBcbiAgICAjIyMqXG4gICAgKiBSZWZyZXNoZXMgdGhlIGFuaW1hdGlvbiBmcm9tIHRoZSBzcGVjaWZpZWQgZGF0YWJhc2UtcmVjb3JkLlxuICAgICpcbiAgICAqIEBtZXRob2QgcmVmcmVzaFxuICAgICogQHBhcmFtIHtPYmplY3R9IHJlY29yZCAtIFRoZSBhbmltYXRpb24gZGF0YWJhc2UtcmVjb3JkLlxuICAgICMjIyAgXG4gICAgIyBGSVhNRTogSXMgdGhhdCBtZXRob2Qgc3RpbGwgaW4gdXNlP1xuICAgIHJlZnJlc2g6IChyZWNvcmQpIC0+XG4gICAgICAgICMjIypcbiAgICAgICAgKiBUaGUgaW1hZ2VzIHRvIGFuaW1hdGUgdGhyb3VnaC5cbiAgICAgICAgKiBAcHJvcGVydHkgaW1hZ2VzXG4gICAgICAgICogQHR5cGUgc3RyaW5nW11cbiAgICAgICAgIyMjXG4gICAgICAgIEBuYW1lID0gcmVjb3JkLm5hbWVcbiAgICAgICAgQGZyYW1lc1ggPSByZWNvcmQuZnJhbWVzWCB8fCAxXG4gICAgICAgIEBmcmFtZXNZID0gcmVjb3JkLmZyYW1lc1kgfHwgMVxuICAgICAgICBAZnJhbWVSYW5nZSA9IHsgc3RhcnQ6IE1hdGgubWluKHJlY29yZC5mcmFtZVJhbmdlLnN0YXJ0LCByZWNvcmQuZnJhbWVSYW5nZS5lbmQpLCBlbmQ6IE1hdGgubWF4KHJlY29yZC5mcmFtZVJhbmdlLnN0YXJ0LCByZWNvcmQuZnJhbWVSYW5nZS5lbmQpIH1cbiAgICAgICAgQHJlcGV0aXRpb25GcmFtZVJhbmdlID0gaWYgcmVjb3JkLnVzZVJlcGV0aXRpb25GcmFtZVJhbmdlIGFuZCByZWNvcmQucmVwZXRpdGlvbkZyYW1lUmFuZ2U/IHRoZW4gcmVjb3JkLnJlcGV0aXRpb25GcmFtZVJhbmdlIGVsc2UgQGZyYW1lUmFuZ2VcbiAgICAgICAgQGZyYW1lQ291bnQgPSAoQGZyYW1lUmFuZ2UuZW5kIC0gQGZyYW1lUmFuZ2Uuc3RhcnQpICsgMVxuICAgICAgICBAZ3JhcGhpYyA9IHJlY29yZC5ncmFwaGljXG4gICAgICAgIEByZXBlYXQgPSByZWNvcmQucmVwZWF0IHx8IG5vXG4gICAgICAgIEBwb3NpdGlvbiA9IHJlY29yZC5wb3NpdGlvblxuXG4gICAgICAgIEBmcmFtZUR1cmF0aW9uID0gaWYgcmVjb3JkLmR1cmF0aW9uPyB0aGVuIE1hdGgucm91bmQocmVjb3JkLmR1cmF0aW9uIC8gQGZyYW1lQ291bnQpIGVsc2UgMTBcbiAgICAgICAgQGZyYW1lQ291bnRlciA9IDBcbiAgICAgICAgQGR1cmF0aW9uID0gcmVjb3JkLmR1cmF0aW9uIHx8IDEwXG4gICAgICAgIEBpc1J1bm5pbmcgPSBub1xuICAgICAgICBAcGF0dGVybk9mZnNldCA9IEBmcmFtZVJhbmdlLnN0YXJ0XG4gICAgICAgIEBwYXR0ZXJuID0gQHBhdHRlcm5PZmZzZXRcbiAgICAgICAgQGZpcnN0UnVuID0geWVzXG4gICAgICAgIFxuICAgICMjIypcbiAgICAqIFN0YXJ0cyB0aGUgZnJhbWUtYW5pbWF0aW9uLlxuICAgICpcbiAgICAqIEBtZXRob2Qgc3RhcnRcbiAgICAjIyMgICBcbiAgICBzdGFydDogKGNhbGxiYWNrKSAtPlxuICAgICAgICBAY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgICAgICBAaXNSdW5uaW5nID0geWVzXG4gICAgICAgIEBmaXJzdFJ1biA9IHllc1xuICAgICAgICBAZnJhbWVDb3VudGVyID0gMFxuICAgICAgICBAZnJhbWVDb3VudCA9IChAZnJhbWVSYW5nZS5lbmQgLSBAZnJhbWVSYW5nZS5zdGFydCkgKyAxXG4gICAgICAgIEBmcmFtZUR1cmF0aW9uID0gTWF0aC5yb3VuZChAZHVyYXRpb24gLyBAZnJhbWVDb3VudClcbiAgICAgICAgQHBhdHRlcm5PZmZzZXQgPSBAZnJhbWVSYW5nZS5zdGFydFxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBVcGRhdGVzIHRoZSBmcmFtZS1hbmltYXRpb24uXG4gICAgKlxuICAgICogQG1ldGhvZCB1cGRhdGVcbiAgICAjIyNcbiAgICB1cGRhdGU6IC0+XG4gICAgICAgIHN1cGVyXG4gICAgICAgIGlmIG5vdCBAaXNSdW5uaW5nIHRoZW4gcmV0dXJuXG4gICAgICAgIFxuICAgICAgICBpZiBAZnJhbWVDb3VudGVyID49IEBkdXJhdGlvblxuICAgICAgICAgICAgaWYgQHJlcGVhdFxuICAgICAgICAgICAgICAgIEBmaXJzdFJ1biA9IG5vXG4gICAgICAgICAgICAgICAgQGZyYW1lQ291bnRlciA9IDBcbiAgICAgICAgICAgICAgICBAZnJhbWVDb3VudCA9IChAcmVwZXRpdGlvbkZyYW1lUmFuZ2UuZW5kIC0gQHJlcGV0aXRpb25GcmFtZVJhbmdlLnN0YXJ0KSArIDFcbiAgICAgICAgICAgICAgICBAZnJhbWVEdXJhdGlvbiA9IE1hdGguY2VpbChAZHVyYXRpb24gLyBAZnJhbWVDb3VudClcbiAgICAgICAgICAgICAgICBAcGF0dGVybk9mZnNldCA9IEByZXBldGl0aW9uRnJhbWVSYW5nZS5zdGFydFxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIEBpc1J1bm5pbmcgPSBub1xuICAgICAgICAgICAgICAgIEBvbkZpbmlzaD8odGhpcylcbiAgICAgICAgICAgICAgICBAY2FsbGJhY2s/KEBvYmplY3QsIHRoaXMpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG5cbiAgICAgICAgQHBhdHRlcm4gPSBAcGF0dGVybk9mZnNldCArIE1hdGguZmxvb3IoQGZyYW1lQ291bnRlciAvIEBmcmFtZUR1cmF0aW9uKSBcbiAgICAgICAgQGZyYW1lQ291bnRlcisrXG4gICAgICAgIFxuICAgICAgICBpZiBAb2JqZWN0P1xuICAgICAgICAgICAgYml0bWFwID0gQG9iamVjdC5iaXRtYXAgfHwgUmVzb3VyY2VNYW5hZ2VyLmdldEJpdG1hcChcIiN7QG9iamVjdC5pbWFnZUZvbGRlcnx8XCJHcmFwaGljcy9QaWN0dXJlc1wifS8je0BvYmplY3QuaW1hZ2V9XCIpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIGJpdG1hcD9cbiAgICAgICAgICAgICAgICBmcmFtZVdpZHRoID0gTWF0aC5mbG9vcihiaXRtYXAud2lkdGggLyBAZnJhbWVzWClcbiAgICAgICAgICAgICAgICBmcmFtZUhlaWdodCA9IE1hdGguZmxvb3IoYml0bWFwLmhlaWdodCAvIEBmcmFtZXNZKVxuICAgICAgICAgICAgICAgIGNvbHVtbiA9IEBwYXR0ZXJuICUgQGZyYW1lc1hcbiAgICAgICAgICAgICAgICByb3cgPSBNYXRoLmZsb29yKEBwYXR0ZXJuIC8gQGZyYW1lc1gpXG4gICAgICAgICAgICAgICAgQG9iamVjdC5zcmNSZWN0LnNldChjb2x1bW4gKiBmcmFtZVdpZHRoLCByb3cgKiBmcmFtZUhlaWdodCwgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQpXG4gICAgICAgICAgICAgICAgQG9iamVjdC5kc3RSZWN0LndpZHRoID0gQG9iamVjdC5zcmNSZWN0LndpZHRoXG4gICAgICAgICAgICAgICAgQG9iamVjdC5kc3RSZWN0LmhlaWdodCA9IEBvYmplY3Quc3JjUmVjdC5oZWlnaHRcbiAgICAgICAgICAgICAgICBcblxud2luZG93LkNvbXBvbmVudF9GcmFtZUFuaW1hdGlvbiA9IENvbXBvbmVudF9GcmFtZUFuaW1hdGlvblxuZ3MuQ29tcG9uZW50X0ZyYW1lQW5pbWF0aW9uID0gQ29tcG9uZW50X0ZyYW1lQW5pbWF0aW9uIl19\n//# sourceURL=Component_FrameAnimation_103.js","parentId":"A8E9945CKEE5CA4855SAC81E480CB8098E0E"},"summary":["name","type","order"]}

Commits for Nextrek/s2s/data/BF1FEA5EK5664A49F7S92A5E94D58BE44A4A.json

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