{"version":3,"file":"sponsoo.857f62a6d45bd2127dc4.chunk.js","mappings":"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","sources":["webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Directives/CheckOutAddressDirective.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Directives/CropperDirective.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Directives/FileSelectorDirective.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Directives/OffersDirective.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Directives/ProfileDirective.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Directives/SocialMediaDataDirective.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Directives/SuccessDirective.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Directives/index.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Directives/CkEditorDirective.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Directives/PasswordVerifyDirective.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Directives/ShareDirective.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Directives/SlickDirective.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Directives/TweetDirective.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Model/Form.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Controller/BoxController.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Controller/NotificationDropdownController.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Controller/RegistrationController.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Controller/RegistrationExampleController.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Controller/SearchController.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Controller/GoogleMapsStyles.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Controller/SearchMapController.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Controller/SponsoringChoiceController.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Controller/NavWatchlistController.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Controller/ProfileWatchlistController.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Controller/index.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Controller/Profile/NegotiatingController.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Controller/Profile/PageController.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Controller/Profile/NewsfeedController.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Controller/Profile/index.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Directives/RemoteValidateDirective.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Service/CroppingService.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Service/SymfonyFormService.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Service/index.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Model/Cropping.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/main.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Controller/CheckOut/CartController.ts","webpack://angular-ui/src/builds/sponsoo/sponsoo/web/angular-ui/src/Controller/CheckOut/index.ts"],"sourcesContent":["/**\n * Directive to add success info to an element.\n *\n * Created by moellers on 27.05.15.\n */\nclass CheckOutAddressDirective {\n  private $el;\n  private $container;\n  private defaultPrototype;\n  private formPrototype;\n  private checked: boolean;\n\n  /**\n   * Constructor.\n   */\n  constructor(scope, element, attrs) {\n    this.$el = $(element);\n    this.$container = $('#spn-invoice-address-container');\n    this.defaultPrototype = this.$container.html();\n    this.formPrototype = attrs.spnCheckOutAddress;\n\n    this.checked = !this.$el.prop('checked');\n\n    // Bind events\n    this.$el.on('click', this.clickCheckbox.bind(this));\n    this.clickCheckbox();\n  }\n\n  /**\n   * Adds a social media datum form.\n   */\n  clickCheckbox() {\n    this.checked = !this.checked;\n\n    if (!this.checked) {\n      // Display the form in the page in an li, before the \"Add a tag\" link li\n      this.$container.html(this.formPrototype);\n      return;\n    }\n\n    this.$container.html(this.defaultPrototype);\n  }\n}\n\nexport default function () {\n  return {\n    restrict: 'A',\n    link: function (scope, element, attrs) {\n      new CheckOutAddressDirective(scope, element, attrs);\n    },\n  };\n}\n","export default [\n  '$timeout',\n  ($timeout) => {\n    return {\n      link: ($scope, el, attr) => {\n        $timeout(() => {\n          // This will start the cropper.\n          $('.form-preview').empty();\n          $(el).cropper({\n            aspectRatio: attr.aspectRatio,\n            preview: '.form-preview',\n            center: true,\n            movable: false,\n            rotatable: false,\n            scalable: false,\n            zoomable: false,\n            crop: $scope.onCrop,\n          });\n        });\n      },\n    };\n  },\n];\n","import angular from 'angular';\n\nconst DIRECTIVE_NAME = 'spnFileSelector';\n\n/**\n * Directive to select files on an element.\n *\n * Created by moellers on 27.05.15.\n */\nclass FileSelectorDirective {\n  private enabled: boolean;\n  private expression: string;\n  private accept: string | null;\n  private maxFileSize: string | null;\n  private $uploadsInput: JQuery;\n\n  /**\n   * Constructor.\n   */\n  constructor(private scope, element, attrs) {\n    this.enabled = true;\n\n    let $el = angular.element(element);\n    $el.data(DIRECTIVE_NAME, this);\n\n    // Evaluate event function.\n    this.expression = attrs.spnFileSelector;\n\n    // Copy configs attributes\n    this.accept = attrs.spnAccept || null;\n    this.maxFileSize = attrs.spnMaxFileSize || null;\n\n    // Prepares the selection on the defined element.\n    this.prepareSelection($el);\n  }\n\n  /**\n   * Prepares file selection of an element.\n   *\n   * @param {jQuery} $elt Element to bind to.\n   */\n  prepareSelection($elt) {\n    this.$uploadsInput = angular.element('<input type=\"file\" class=\"hidden\"/>');\n\n    // Set accept attribute.\n    if (this.accept) {\n      this.$uploadsInput.attr('accept', this.accept);\n    }\n\n    // Stop propagation on input click.\n    this.$uploadsInput.on('click', function (e) {\n      e.stopPropagation();\n    });\n\n    // Bind change event on hidden input element.\n    this.$uploadsInput.on(\n      'change',\n      function (e) {\n        e.stopPropagation();\n        e.preventDefault();\n\n        // Files from input.\n        let files = this.$uploadsInput.prop('files');\n\n        // Reset the form element.\n        this.$uploadsInput.replaceWith((this.$uploadsInput = this.$uploadsInput.clone(true)));\n\n        // Bind files to scope.\n        this.scope.$files = files;\n        this.scope.$selector = this;\n\n        // Check files for file size.\n        if (this.maxFileSize != null) {\n          for (let i in files) {\n            let file = files[i];\n            if (file instanceof File) {\n              if (file.size > this.maxFileSize) {\n                alert('The given file exceeded the maximum file size of ' + this.maxFileSize + ' bytes.');\n                return;\n              }\n            }\n          }\n        }\n\n        // Evaluate expression passed to attribute.\n        this.scope.$eval(this.expression);\n      }.bind(this)\n    );\n\n    // Bind click event.\n    angular.element('body').append(this.$uploadsInput);\n    $elt\n      .on(\n        'click',\n        function () {\n          if (this.enabled) {\n            this.$uploadsInput.click();\n          }\n        }.bind(this)\n      )\n      .css('cursor', 'pointer');\n  }\n\n  enable() {\n    this.enabled = true;\n  }\n\n  disable() {\n    this.enabled = false;\n  }\n}\n\n// Some jQuery API.\n$.fn[DIRECTIVE_NAME] = function (method) {\n  return this.each(function () {\n    var selector = $.data(this, DIRECTIVE_NAME);\n\n    if (!selector) {\n      throw 'This is not a file selector instance!';\n    }\n\n    if (typeof selector[method] === 'function') {\n      selector[method]();\n    }\n  });\n};\n\nexport default function () {\n  return {\n    restrict: 'A',\n    link: function (scope, element, attrs) {\n      new FileSelectorDirective(scope, element, attrs);\n    },\n  };\n}\n","import angular from 'angular';\n\n/**\n * Directive to add success info to an element.\n *\n * Created by moellers on 27.05.15.\n */\nclass OffersDirective {\n  private $el;\n  private formPrototype;\n  private index: number;\n\n  /**\n   * Constructor.\n   */\n  constructor(scope, element, attrs) {\n    this.$el = $(element);\n    this.formPrototype = attrs.spnOffers;\n\n    // Counts the current index.\n    this.index = this.$el.find(':input').length;\n\n    // Bind events\n    this.$el.find('#spn-offers-add').on('click', this.onAddClick.bind(this));\n    this.$el.find('.spn-offers-remove').on('click', this.onRemoveClick.bind(this));\n\n    // Add an empty offer if none is set.\n    if (this.index == 0) {\n      this.addOffer();\n    }\n  }\n\n  /**\n   * @param {Event} event\n   */\n  onAddClick(event) {\n    event.preventDefault();\n    this.addOffer();\n  }\n\n  /**\n   * Adds a social media datum form.\n   */\n  addOffer() {\n    // Replace '__name__' in the prototype's HTML to\n    // instead be a number based on how many items we have\n    let newForm = this.formPrototype.replace(/__name__/g, this.index).replace(/required=\"required\" /g, '');\n\n    // increase the index with one for the next item\n    this.index++;\n\n    // Display the form in the page in an li, before the \"Add a tag\" link li\n    let $newFormLi = angular.element('<div class=\"form-group\"></div>').append(newForm);\n    $newFormLi.find('.select2').select2();\n    this.$el.find('#spn-offers-container').append($newFormLi);\n  }\n\n  /**\n   * Removes a social media datum form.\n   *\n   * @param {Event} event\n   */\n  onRemoveClick(event) {\n    event.preventDefault();\n    let parents = $(event.target).parents('.form-group');\n\n    parents[0].remove();\n  }\n}\n\nexport default function () {\n  return {\n    restrict: 'A',\n    link: function (scope, element, attrs) {\n      new OffersDirective(scope, element, attrs);\n    },\n  };\n}\n","import angular from 'angular';\n\n/**\n * Directive to add success info to an element.\n *\n * Created by moellers on 27.05.15.\n */\nclass ProfileDirective {\n  /**\n   * Constructor.\n   */\n  constructor(scope, element, attributes) {\n    // Parses the Spn-Profile attribute.\n    scope.profile = angular.fromJson(attributes.spnProfile);\n    console.log(scope.profile);\n  }\n}\n\nexport default function () {\n  return {\n    restrict: 'A',\n    link: function (scope, element, attributes) {\n      new ProfileDirective(scope, element, attributes);\n    },\n  };\n}\n","import angular from 'angular';\n\n/**\n * Directive to add success info to an element.\n *\n * Created by moellers on 27.05.15.\n */\nclass SocialMediaDataDirective {\n  private formPrototype;\n  private $el: JQuery;\n  private index: number;\n\n  /**\n   * Constructor.\n   */\n  constructor(private scope, element, attrs, private compile) {\n    this.$el = $(element);\n    this.formPrototype = attrs.spnSocialMediaData;\n\n    // Counts the current index.\n    this.index = this.$el.find('.form-group-network').length;\n\n    // Bind events\n    this.$el.find('#spn-social-media-data-add').on('click', this.onClickAdd.bind(this));\n    this.$el.find('.spn-social-media-data-remove').on('click', this.removeSocialMediaDatumForm.bind(this));\n\n    // Add some empty links if nothing has been filled out before.\n    if (this.index == 0) {\n      this.addSocialMediaDatumForm('website');\n      this.addSocialMediaDatumForm('facebook');\n    }\n  }\n\n  /**\n   * Adds a social media datum form.\n   *\n   * @param {Event} [event]\n   */\n  onClickAdd(event) {\n    event.preventDefault();\n    this.addSocialMediaDatumForm();\n  }\n\n  /**\n   * Adds a social media datum form.\n   */\n  addSocialMediaDatumForm(network?: string) {\n    network || (network = 'website');\n\n    // Replace '__name__' in the prototype's HTML to\n    // instead be a number based on how many items we have\n    let newForm = this.formPrototype.replace(/__name__/g, this.index).replace(/required=\"required\" /g, '');\n\n    // increase the index with one for the next item\n    this.index++;\n\n    // Scan the new DOM with Angular.\n    newForm = this.compile(newForm)(this.scope);\n\n    // Display the form in the page in an li, before the \"Add a tag\" link li\n    //let $newFormLi = angular.element('<div class=\"form-group\"></div>').append(newForm).find('input').removeAttr('required');\n    let $newFormLi = angular.element('<div class=\"form-group\"></div>').append(newForm);\n\n    // Initializes the specific controller with a given value.\n    const scope: any = $newFormLi.find('.form-group-network').scope();\n    scope.network.setValue(network);\n    $newFormLi.find('.spn-social-media-data-remove').on('click', this.removeSocialMediaDatumForm.bind(this));\n\n    this.$el.find('#spn-social-media-data-container').append($newFormLi);\n  }\n\n  /**\n   * Adds a social media datum form.\n   *\n   * @param {Event} event\n   */\n  removeSocialMediaDatumForm(event) {\n    event.preventDefault();\n    let parents = $(event.target).parents('.form-group').parents('.form-group');\n\n    parents[0].remove();\n  }\n}\n\nexport default [\n  '$compile',\n  function ($compile) {\n    return {\n      restrict: 'A',\n      link: function (scope, element, attrs) {\n        new SocialMediaDataDirective(scope, element, attrs, $compile);\n      },\n    };\n  },\n];\n","import angular from 'angular';\n\n/**\n * Directive to add success info to an element.\n *\n * Created by moellers on 27.05.15.\n */\nclass SuccessDirective {\n  /**\n   * Constructor.\n   */\n  constructor(private scope, element, attrs, $compile) {\n    // Retrieve expression from attribute.\n    let hasSuccessExpr = attrs.spnSuccess;\n\n    // Add Success class.\n    let $el = angular.element(element);\n    scope.$watch(hasSuccessExpr, function (hasSuccess) {\n      $el.toggleClass('has-success', hasSuccess);\n    });\n\n    // Prepare icon.\n    let $icon = angular.element('<span class=\"fa fa-check form-control-feedback\" aria-hidden=\"true\"></span>');\n    $icon.attr('ng-show', hasSuccessExpr);\n\n    // Add icon after form element.\n    let iconFunc = $compile($icon);\n    $el.find('input.form-control').after($icon);\n    iconFunc(scope);\n  }\n}\n\nexport default [\n  '$compile',\n  function ($compile) {\n    return {\n      restrict: 'A',\n      link: function (scope, element, attrs) {\n        new SuccessDirective(scope, element, attrs, $compile);\n      },\n    };\n  },\n];\n","import angular from 'angular';\nimport CheckOutAddressDirective from './CheckOutAddressDirective';\nimport CkEditorDirective from './CkEditorDirective';\nimport CropperDirective from './CropperDirective';\nimport FileSelectorDirective from './FileSelectorDirective';\nimport OffersDirective from './OffersDirective';\nimport PasswordVerifyDirective from './PasswordVerifyDirective';\nimport ProfileDirective from './ProfileDirective';\nimport RemoteValidateDirective from './RemoteValidateDirective';\nimport ShareDirective from './ShareDirective';\nimport SlickDirective from './SlickDirective';\nimport SocialMediaDataDirective from './SocialMediaDataDirective';\nimport SuccessDirective from './SuccessDirective';\nimport TweetDirective from './TweetDirective';\n\nconst app = angular.module('sponsoo');\napp.directive('spnCheckOutAddress', CheckOutAddressDirective);\napp.directive('spnCkEditor', CkEditorDirective);\napp.directive('spnCropper', CropperDirective);\napp.directive('spnFileSelector', FileSelectorDirective);\napp.directive('spnOffers', OffersDirective);\napp.directive('spnPasswordVerify', PasswordVerifyDirective);\napp.directive('spnProfile', ProfileDirective);\napp.directive('spnRemoteValidate', RemoteValidateDirective);\napp.directive('spnShare', ShareDirective);\napp.directive('spnSlick', SlickDirective);\napp.directive('spnSocialMediaData', SocialMediaDataDirective);\napp.directive('spnSuccess', SuccessDirective);\napp.directive('spnTweet', TweetDirective);\n","import CKEDITOR from 'ckeditor4';  // Update the import to use ckeditor4\n\nexport default () => {\n    return {\n        require: '?ngModel',\n        link: ($scope, element, attr, ngModel) => {\n            let ck = CKEDITOR.replace(element[0], {\n                // Disable annoying security notification trying to scare us into upgrading to the paid CKEditor version\n                versionCheck: false\n            });\n            ck.on('change', () => {  // Changed from 'pasteState' to 'change'\n                $scope.$apply(() => {\n                    ngModel.$setViewValue(ck.getData());\n                });\n            });\n\n            ngModel.$render = () => {\n                ck.setData(ngModel.$modelValue);\n            };\n        },\n    };\n};\n","export default function () {\n  return {\n    restrict: 'A',\n    scope: {\n      spnPasswordVerify: '=',\n    },\n    require: '?ngModel',\n    link: function (scope, elem, attrs, ctrl) {\n      return scope.$watch(\n        function () {\n          if (scope.spnPasswordVerify || ctrl.$viewValue) {\n            return scope.spnPasswordVerify + '_' + ctrl.$viewValue;\n          }\n        },\n        function (value) {\n          if (value) {\n            return ctrl.$parsers.unshift(function (viewValue) {\n              var origin;\n              origin = scope.spnPasswordVerify;\n              if (origin !== viewValue) {\n                ctrl.$setValidity('spnPasswordVerify', false);\n                return void 0;\n              } else {\n                ctrl.$setValidity('spnPasswordVerify', true);\n                return viewValue;\n              }\n            });\n          }\n        }\n      );\n    },\n  };\n}\n","declare var FB: any;\n\nexport default function () {\n  return {\n    link: function (scope, element, attr) {\n      let url = attr.url;\n      let picture = attr.picture;\n      let name = attr.name;\n      let description = attr.description;\n\n      $(element).on('click', function (e) {\n        e.preventDefault();\n\n        picture = picture == 'null' ? null : picture;\n\n        var feed = {\n          method: 'share',\n          href: url,\n          title: name,\n          description: description,\n          picture: picture,\n        };\n\n        FB.ui(feed, function (response) {});\n      });\n    },\n  };\n}\n","import angular from 'angular';\n\n/**\n * The &lt;spn-slick/&gt; directive for the Slick slider.\n *\n * @constructor\n * @see {@link http://kenwheeler.github.io/slick/|Slick}\n */\nexport default function () {\n  /**\n   * Clears HTML attributes to slick compatible options.\n   */\n  function parseAttributes(attributes: { [key: string]: string }): any {\n    var slickOptions = {\n      responsive: [\n        {\n          breakpoint: 1240,\n          settings: {\n            slidesToShow: 3,\n          },\n        },\n        {\n          breakpoint: 992,\n          settings: {\n            slidesToShow: 2,\n          },\n        },\n        {\n          breakpoint: 480,\n          settings: {\n            slidesToShow: 1,\n            slidesToScroll: 1,\n          },\n        },\n      ],\n    };\n    angular.forEach(attributes, function (value, key) {\n      // Ignore Angular keys.\n      if ('$' === key[0]) {\n        return;\n      }\n\n      try {\n        slickOptions[key] = JSON.parse(value);\n      } catch (e) {\n        slickOptions[key] = value;\n      }\n    });\n    return slickOptions;\n  }\n\n  return {\n    restrict: 'E', // Only Elements, not attributes.\n    link: function (scope, element, attrs) {\n      $(element).slick(parseAttributes(attrs));\n    },\n  };\n}\n","export default function () {\n  return {\n    link: function (scope, element, attr) {\n      let params = [];\n\n      let locale = encodeURIComponent(attr.locale);\n      if (locale) {\n        params.push(`locale=${locale}`);\n      }\n\n      let url = encodeURIComponent(attr.url);\n      if (url) {\n        params.push(`url=${url}`);\n      }\n\n      let via = encodeURIComponent(attr.via);\n      if (via) {\n        params.push(`via=${via}`);\n      }\n\n      let text = encodeURIComponent(attr.text);\n      if (text) {\n        params.push(`text=${text}`);\n      }\n\n      let hashtags = encodeURIComponent(attr.hashtags);\n      if (hashtags) {\n        params.push(`hashtags=${hashtags}`);\n      }\n\n      let href = `${attr.href}?${params.join('&')}`;\n\n      $(element).on('click', function (e) {\n        e.preventDefault();\n        window.open(href, '_blank', 'height=442,width=550');\n      });\n    },\n  };\n}\n","export class Form {\n  private _name: string;\n  private _targetUrl: string;\n  private params: { [key: string]: string };\n\n  constructor(name: string, targetUrl: string, csrfToken: string) {\n    this._name = name;\n    this._targetUrl = targetUrl;\n    this.params = { _token: csrfToken };\n  }\n\n  /**\n   * @return {string}\n   */\n  get name() {\n    return this._name;\n  }\n\n  /**\n   * @return {string}\n   */\n  get targetUrl() {\n    return this._targetUrl;\n  }\n\n  /**\n   * @return {string}\n   */\n  get csrfToken() {\n    return this.params['_token'];\n  }\n\n  /**\n   * @param {string} param\n   * @param {string|number|File} value\n   */\n  set(param: string, value): this {\n    this.params[param] = value;\n    return this;\n  }\n\n  /**\n   * @param {Object} values\n   * @return {this}\n   */\n  setAll(values): this {\n    for (let param in values) {\n      this.set(param, values[param]);\n    }\n    return this;\n  }\n\n  /**\n   * @param {string} param\n   * @return {string|number|File}\n   */\n  get(param: string) {\n    return this.params[param];\n  }\n\n  /**\n   * @return {{_token: string}|*}\n   */\n  all() {\n    return this.params;\n  }\n}\n","import { IController } from 'angular';\n\nexport default class BoxController implements IController {\n  private $el;\n  private _appendixShown: boolean;\n  private _closeHandler;\n\n  static $inject = ['$element'];\n\n  /**\n   * Constructor.\n   *\n   * @param element\n   */\n  constructor(element) {\n    this.$el = $(element);\n    this._appendixShown = false;\n    this._closeHandler = this.closeAppendix.bind(this);\n  }\n\n  $onInit() {}\n\n  set appendixShown(value: boolean) {\n    this._appendixShown = value;\n\n    let toggle = this.$el.find('.btn-toggle');\n    toggle.html(value ? '<span class=\"fa fa-chevron-up\"></span>' : '<span class=\"fa fa-chevron-down\"></span>');\n\n    let appendix = this.$el.find('.box-appendix');\n    if (value) {\n      this.$el.addClass('appendix-shown');\n      appendix.slideDown();\n      $('body').on('click', this._closeHandler);\n    } else {\n      appendix.slideUp(\n        function () {\n          this.$el.removeClass('appendix-shown');\n        }.bind(this)\n      );\n      $('body').off('click', this._closeHandler);\n    }\n  }\n\n  /**\n   * Expands the box and removes superfluous elements.\n   */\n  expand() {\n    let footer = this.$el.find('.box-footer');\n    let buttons = this.$el.find('.box-buttons');\n    this.$el.find('.box-body').removeClass('box-limited');\n    this.$el.removeClass('box-with-buttons');\n    buttons.remove();\n    footer.remove();\n  }\n\n  /**\n   * Toggles the appendix shown property.\n   *\n   * @param {Event} [e]\n   */\n  toggleAppendix(e) {\n    e.preventDefault();\n    e.stopPropagation();\n\n    this.appendixShown = !this._appendixShown;\n  }\n\n  /**\n   * Closes the appendix.\n   *\n   * @param {Event} [e]\n   */\n  closeAppendix(e) {\n    e.stopPropagation();\n\n    this.appendixShown = false;\n  }\n}\n","import ClickEvent = JQuery.ClickEvent;\nimport { IController } from 'angular';\n\nconst MOBILE_WIDTH = 768;\n\nexport default class NotificationDropdownController implements IController {\n  private $el;\n  private $dropdownWrapper;\n\n  static $inject = ['$element', '$scope', '$document', '$http'];\n\n  /**\n   * Constructor.\n   *\n   * @param element\n   */\n  constructor(element, private scope, private $document, private http: angular.IHttpService) {\n    this.$el = $(element);\n\n    this.scope.displayNotificationDropdown = false;\n  }\n\n  $onInit() {\n    this.$document.on('click', this.clickOutside.bind(this));\n  }\n\n  toggleDropdown(event: ClickEvent) {\n    if (window.innerWidth > MOBILE_WIDTH) {\n      event.preventDefault();\n\n      this.scope.displayNotificationDropdown = !this.scope.displayNotificationDropdown;\n    }\n  }\n\n  clickOutside(event: ClickEvent) {\n    if (!this.scope.displayNotificationDropdown) {\n      return;\n    }\n\n    const scope = this.scope;\n\n    if (!$.contains(this.$el.get(0), event.target) && !this.$el.is(event.target)) {\n      this.hideDropdown(scope);\n    }\n  }\n\n  hideDropdown(scope) {\n    scope.displayNotificationDropdown = false;\n    scope.$apply();\n  }\n\n  /**\n   * @param event\n   * @param id\n   */\n  markAsRead(event: Event, id: number) {\n    if (!id) {\n      return;\n    }\n    this.markAllAsRead(event, [id], false);\n  }\n\n  /**\n   * @param event\n   * @param ids\n   */\n  markAllAsRead(event: Event, ids: number[], preventNavigation = true) {\n    if (preventNavigation) {\n      event.preventDefault();\n    }\n\n    if (!ids) {\n      return;\n    }\n\n    const url = Routing.generate('aurelia_notifications_mark_read_api', {});\n    const payload = { ids: ids };\n    const csrfToken = this.$el.data('csrf');\n\n    const config: angular.IRequestShortcutConfig = {\n      headers: {\n        'xsrf-token': csrfToken,\n      },\n    };\n\n    this.http\n      .post(url, payload, config)\n      .then((response) => {\n        ids.forEach((id) => {\n          this.$el.find('.notification-item[data-id=\"' + id + '\"').removeClass('notification-unread');\n        });\n      })\n      .catch((e) => {});\n  }\n}\n","import { IController } from 'angular';\n\nexport default class RegistrationController implements IController {\n  static $inject = ['$scope'];\n  public user = {\n    username: '',\n    password: '',\n    email: '',\n  };\n\n  public $onInit(): void {}\n}\n","import { IController } from 'angular';\n\nexport default class RegistrationExampleController implements IController {\n  static $inject = ['$scope', '$element'];\n\n  /**\n   * Constructor.\n   *\n   * @param {Scope} $scope\n   * @param {HTMLElement} $element\n   */\n  constructor(private $scope, private $element) {}\n\n  public $onInit(): void {}\n\n  init(text) {\n    this.$scope.text = text;\n  }\n\n  closeWindow() {\n    window.close();\n  }\n}\n","/**\n *\n */\nimport { IController } from 'angular';\n\nexport default class SearchController implements IController {\n  private $el;\n  private endlessScrollingEnabled: boolean;\n  private pagination;\n  private query;\n  private loading: boolean;\n  private publicRequest;\n\n  static $inject = ['$http', '$element'];\n\n  /**\n   * Constructor.\n   */\n  constructor(private http, element) {\n    // Bind dependencies.\n    this.$el = $(element);\n\n    this.pagination = null;\n    this.query = SearchController.getQuery();\n    this.query['page'] || (this.query['page'] = 1);\n    this.publicRequest = parseInt(this.$el.find('#public-request').val());\n\n    this.endlessScrollingEnabled = !this.publicRequest;\n\n    this.loading = false;\n    $(document).on('scroll', this.onScrollDocument.bind(this));\n  }\n\n  public $onInit(): void {}\n\n  /**\n   * Returns the query parameters.\n   * @return {{}}\n   */\n  static getQuery() {\n    let query = {},\n      hash;\n    let queryStart = window.location.href.indexOf('?');\n    if (queryStart == -1) {\n      return {};\n    }\n\n    let hashes = window.location.href.slice(queryStart + 1).split('&');\n    for (let i = 0; i < hashes.length; i++) {\n      hash = hashes[i].split('=');\n      let key = decodeURIComponent(hash[0]);\n      let value = decodeURIComponent(hash[1]);\n      if (key.endsWith('[]')) {\n        key = key.substring(0, key.length - 2);\n        query[key] || (query[key] = []);\n        query[key].push(value);\n        continue;\n      }\n\n      query[key] = value;\n    }\n\n    return query;\n  }\n\n  /**\n   * Encodes the query parameters.\n   * @param {{}} object\n   * @return {string}\n   */\n  static makeQuery(object) {\n    let base,\n      queryStart = window.location.href.indexOf('?');\n    if (queryStart == -1) {\n      base = window.location.href + '?';\n    } else {\n      base = window.location.href.substr(0, queryStart + 1);\n    }\n    let hashes = [];\n    for (let key in object) {\n      let value = object[key];\n      if (value instanceof Array) {\n        key += '[]';\n        for (let val of value) {\n          hashes.push(encodeURIComponent(key) + '=' + encodeURIComponent(val));\n        }\n        continue;\n      }\n\n      hashes.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n    }\n\n    return base + hashes.join('&');\n  }\n\n  /**\n   * @public\n   */\n  onScrollDocument() {\n    if (!this.endlessScrollingEnabled) {\n      return;\n    }\n\n    let offsetBottom = this.$el.height() + this.$el.offset().top;\n    let scrollBottom = $(document).scrollTop() + $(window).height();\n    let pixelsToBottom = offsetBottom - scrollBottom;\n\n    if (pixelsToBottom < 800) {\n      this.onScrollNext();\n    }\n  }\n\n  /**\n   * @public\n   */\n  onScrollNext() {\n    if (this.loading) {\n      return;\n    }\n\n    this.loading = true;\n    this.query.page++;\n    let url = SearchController.makeQuery(this.query);\n    let promise = this.http({\n      method: 'GET',\n      url: url,\n      headers: {\n        Accept: 'text/html',\n        'X-No-Layout': true,\n      },\n    });\n\n    promise.then(\n      (response) => {\n        this.readPaginationHeaders(response);\n        if (response.status == 200) {\n          this.$el.append(response.data);\n        } else if (this.pagination.page > this.pagination.pageCount) {\n          this.endlessScrollingEnabled = false;\n        }\n        this.loading = false;\n      },\n      (response) => {\n        // Error\n        this.endlessScrollingEnabled = false;\n        this.loading = false;\n      }\n    );\n  }\n\n  /**\n   * @param response\n   * @private\n   */\n  readPaginationHeaders(response) {\n    this.pagination = {\n      page: response.headers('X-Page'),\n      pageCount: response.headers('X-Page-Count'),\n      totalItemCount: response.headers('X-Total-Item-Count'),\n      itemNumberPerPage: response.headers('X-Item-Number-Per-Page'),\n    };\n  }\n}\n","const black = '#000000';\nconst color1 = '#1b1b1b';\nconst color2 = '#2c2c2c';\nconst color3 = '#3c3c3c';\nconst color4 = '#4e4e4e';\nconst color5 = '#549400';\nconst color6 = '#616161';\nconst color7 = '#757575';\nconst color8 = '#8a8a8a';\nconst color9 = '#9e9e9e';\nconst color10 = '#bdbdbd';\n\nexport default [\n  {\n    elementType: 'geometry',\n    stylers: [\n      {\n        color: color2,\n      },\n    ],\n  },\n  {\n    elementType: 'labels.icon',\n    stylers: [\n      {\n        visibility: 'off',\n      },\n    ],\n  },\n  {\n    elementType: 'labels.text.fill',\n    stylers: [\n      {\n        color: color7,\n      },\n    ],\n  },\n  {\n    elementType: 'labels.text.stroke',\n    stylers: [\n      {\n        color: color2,\n      },\n    ],\n  },\n  {\n    featureType: 'administrative',\n    elementType: 'geometry',\n    stylers: [\n      {\n        color: color7,\n      },\n    ],\n  },\n  {\n    featureType: 'administrative.country',\n    elementType: 'labels.text.fill',\n    stylers: [\n      {\n        color: color9,\n      },\n    ],\n  },\n  {\n    featureType: 'administrative.land_parcel',\n    stylers: [\n      {\n        visibility: 'off',\n      },\n    ],\n  },\n  {\n    featureType: 'administrative.locality',\n    elementType: 'labels.text.fill',\n    stylers: [\n      {\n        color: color10,\n      },\n    ],\n  },\n  {\n    featureType: 'poi',\n    elementType: 'labels.text.fill',\n    stylers: [\n      {\n        color: color7,\n      },\n    ],\n  },\n  {\n    featureType: 'poi.park',\n    elementType: 'geometry',\n    stylers: [\n      {\n        color: color1,\n      },\n    ],\n  },\n  {\n    featureType: 'poi.park',\n    elementType: 'labels.text.fill',\n    stylers: [\n      {\n        color: color6,\n      },\n    ],\n  },\n  {\n    featureType: 'poi.park',\n    elementType: 'labels.text.stroke',\n    stylers: [\n      {\n        color: color1,\n      },\n    ],\n  },\n  {\n    featureType: 'road',\n    elementType: 'geometry.fill',\n    stylers: [\n      {\n        color: color2,\n      },\n    ],\n  },\n  {\n    featureType: 'road',\n    elementType: 'labels.text.fill',\n    stylers: [\n      {\n        color: color8,\n      },\n    ],\n  },\n  {\n    featureType: 'road.arterial',\n    elementType: 'geometry',\n    stylers: [\n      {\n        color: color3,\n      },\n    ],\n  },\n  {\n    featureType: 'road.arterial',\n    elementType: 'geometry.fill',\n    stylers: [\n      {\n        color: color5,\n      },\n      {\n        weight: 0.5,\n      },\n    ],\n  },\n  {\n    featureType: 'road.highway',\n    elementType: 'geometry',\n    stylers: [\n      {\n        color: color3,\n      },\n    ],\n  },\n  {\n    featureType: 'road.highway',\n    elementType: 'geometry.fill',\n    stylers: [\n      {\n        color: color5,\n      },\n    ],\n  },\n  {\n    featureType: 'road.highway.controlled_access',\n    elementType: 'geometry',\n    stylers: [\n      {\n        color: color4,\n      },\n    ],\n  },\n  {\n    featureType: 'road.local',\n    elementType: 'labels.text.fill',\n    stylers: [\n      {\n        color: color6,\n      },\n    ],\n  },\n  {\n    featureType: 'transit',\n    elementType: 'labels.text.fill',\n    stylers: [\n      {\n        color: color7,\n      },\n    ],\n  },\n  {\n    featureType: 'water',\n    elementType: 'geometry',\n    stylers: [\n      {\n        color: black,\n      },\n    ],\n  },\n  {\n    featureType: 'water',\n    elementType: 'labels.text.fill',\n    stylers: [\n      {\n        color: color3,\n      },\n    ],\n  },\n];\n","import MarkerClusterer from '@google/markerclusterer';\nimport { IController, ILogService } from 'angular';\nimport GoogleMapsLoader from 'google-maps';\nimport MAP_STYLES from './GoogleMapsStyles';\n\nconst MARKET_MIN_FACTOR = 0.999998;\nconst MARKER_MAX_FACTOR = 1.000002;\n\n/**\n * Angular controller to display google maps\n */\nexport default class SearchMapController implements IController {\n  private $el;\n  private query;\n  private loading: boolean;\n  private googleMapsClient;\n\n  private $mapEl;\n  private $filterForm;\n  private $zipCodeInput;\n\n  private searchApiUri: string;\n  private defaultProfileImage: string;\n  private map: google.maps.Map;\n  private googleMaps;\n  private currentInfoBox;\n  private mapMarkers: Array<google.maps.Marker> = [];\n  private markerCluster: MarkerClusterer;\n\n  private profilesResult = [];\n  private showProfileUrl: string;\n\n  private transMyLocation: string;\n\n  static $inject = ['$http', '$log', '$element'];\n  static MARKERS_SWITCH_ZOOM = 14;\n\n  /**\n   * Constructor.\n   */\n  constructor(private http, private log: ILogService, element) {\n    // Bind dependencies.\n    this.$el = $(element);\n    this.$mapEl = this.$el.find('#map');\n    this.$filterForm = this.$el.find('#search-filters-form');\n    this.$zipCodeInput = this.$filterForm.find('[name=\"zipcode\"]');\n    this.defaultProfileImage = this.$el.find('#default-image').val();\n    this.searchApiUri = this.$el.find('#search-maps-api').val();\n    this.transMyLocation = this.$el.find('#trans-my-location').text();\n    this.showProfileUrl = SearchMapController.getUrlParameter('showProfile');\n\n    let apiKey = this.$el.find('#google-maps-key').val();\n\n    if (!apiKey) {\n      this.log.error('SPONSOO: Google api key missing.');\n      return;\n    }\n\n    GoogleMapsLoader.KEY = apiKey;\n    GoogleMapsLoader.LIBRARIES = ['places'];\n\n    GoogleMapsLoader.load(this.initMap.bind(this));\n\n    this.$filterForm.find('[name=submit]').on('click', (event) => {\n      event.preventDefault();\n\n      const isZipcodeSet = this.$zipCodeInput.val();\n      if (!isZipcodeSet) {\n        window.location.reload();\n      } else {\n        this.reloadProfiles();\n      }\n    });\n\n    this.setLoading(false);\n  }\n\n  public $onInit(): void {}\n\n  /**\n   * Init google map\n   * @param google\n   */\n  initMap(google) {\n    if (this.$mapEl.length === 0) {\n      this.log.error('SPONSOO: Map element missing.');\n      return;\n    }\n\n    this.googleMaps = google.maps;\n\n    const [lat, lng, text] = this.getZipcodeLocation();\n\n    this.map = new this.googleMaps.Map(this.$mapEl.get(0), {\n      zoom: 10,\n      // Hamburg coordinates by default :)\n      center: new google.maps.LatLng(lat, lng),\n      mapTypeId: 'roadmap',\n      styles: MAP_STYLES,\n    });\n\n    this.setMapCenterAndLoadProfiles();\n  }\n\n  /** Get location from form */\n  getZipcodeLocation() {\n    const zipcodeValue = this.$zipCodeInput.val();\n    let parts = Array(3);\n    if (zipcodeValue && zipcodeValue.includes(',')) {\n      parts = zipcodeValue.split(',');\n    }\n    const lat = parts[0] || 53.551086;\n    const lng = parts[1] || 9.993682;\n    const text = parts[2] || 'Hamburg';\n\n    return [lat, lng, text];\n  }\n\n  /**\n   * Ask for browser location\n   */\n  setMapCenterAndLoadProfiles() {\n    const isZipcodeSet = this.$zipCodeInput.val();\n\n    if (isZipcodeSet) {\n      const [lat, lng, text] = this.getZipcodeLocation();\n      this.setMapCenterInForm(lat, lng, text, true);\n\n      this.log.debug('Center set to:', lat, lng, text, this.showProfileUrl);\n\n      if (!this.showProfileUrl) {\n        this.drawMyLocationMarker(lat, lng, text);\n      }\n\n      return;\n    }\n    // If zipcode is not set - ask for location\n    if (navigator.geolocation) {\n      navigator.geolocation.getCurrentPosition(this.setMyGeolocation.bind(this), () => {\n        // Get default Hamburg location\n        const [lat, lng, text] = this.getZipcodeLocation();\n        this.setMapCenterInForm(lat, lng, text, true);\n\n        this.log.debug('Center set to:', lat, lng, text, this.showProfileUrl);\n\n        this.drawMyLocationMarker(lat, lng, text);\n      });\n    } else {\n      this.log.warn('Geolocation is not supported by this browser.');\n    }\n  }\n\n  /**\n   * Update map center\n   * @param position\n   */\n  setMyGeolocation(position) {\n    const userLocation = new this.googleMaps.LatLng(position.coords.latitude, position.coords.longitude);\n    this.map.setCenter(userLocation);\n\n    this.setMapCenterInForm(position.coords.latitude, position.coords.longitude, this.transMyLocation, true);\n    this.drawMyLocationMarker(position.coords.latitude, position.coords.longitude, this.transMyLocation);\n  }\n\n  /** Set form's zipcode and reload profiles */\n  setMapCenterInForm(lat, lng, text, reloadProfiles = false) {\n    const myLocationValue = lat + ',' + lng + ',' + text;\n    const myLocationOption = new Option(text, myLocationValue, true, true);\n\n    // set location in filters with 50km radius\n    this.$filterForm.find('[name=\"radius\"]').val(50);\n    this.$zipCodeInput.append(myLocationOption).trigger('change');\n\n    if (reloadProfiles) {\n      this.reloadProfiles();\n    }\n  }\n\n  /** Drav myLocation marker */\n  drawMyLocationMarker(lat, lng, text) {\n    const userLocation = new this.googleMaps.LatLng(lat, lng);\n\n    const userLocationMarker = new this.googleMaps.Marker({\n      position: userLocation,\n      map: this.map,\n      title: this.transMyLocation,\n    });\n\n    const infowindow = new this.googleMaps.InfoWindow({\n      content: this.transMyLocation,\n    });\n\n    userLocationMarker.addListener('click', function () {\n      if (this.currentInfoBox) {\n        this.currentInfoBox.close();\n      }\n      this.currentInfoBox = infowindow;\n      this.currentInfoBox.open(this.map, userLocationMarker);\n    });\n  }\n\n  /**\n   * Update browser url and reload profiles on filter change\n   */\n  reloadProfiles() {\n    let queryString = this.$filterForm.serialize();\n\n    if (this.showProfileUrl) {\n      queryString += '&showProfile=' + this.showProfileUrl;\n    }\n\n    window.history.pushState(null, document.title, SearchMapController.makeUrl(queryString));\n\n    this.loadProfiles(queryString);\n  }\n\n  /**\n   * Load profiles for current filter\n   */\n  private loadProfiles(queryString = '') {\n    if (this.loading) {\n      return;\n    }\n\n    this.setLoading(true);\n\n    let url = this.searchApiUri + '?' + queryString;\n\n    let promise = this.http({\n      method: 'GET',\n      url: url,\n      headers: {\n        Accept: 'application/json',\n        'X-No-Layout': true,\n      },\n    });\n\n    promise.then(\n      (response) => {\n        if (response.status == 200) {\n          // replace map markers\n          this.profilesResult = response.data || [];\n          this.setLoading(false);\n\n          this.drawProfilesOnMap();\n        }\n      },\n      (response) => {\n        // Error\n        this.setLoading(false);\n      }\n    );\n  }\n\n  /**\n   * Draw profiles as marker on map\n   */\n  private drawProfilesOnMap() {\n    if (this.markerCluster) {\n      this.markerCluster.clearMarkers();\n      this.mapMarkers.forEach((m) => m.setMap(null));\n    }\n\n    const [lat, lng] = this.getZipcodeLocation();\n    this.map.setCenter(new google.maps.LatLng(lat, lng));\n\n    this.mapMarkers = this.profilesResult.map((result) => {\n      const marker = new google.maps.Marker({\n        position: new google.maps.LatLng(result.lat * SearchMapController.randomFuzzFactor(), result.lng * SearchMapController.randomFuzzFactor()),\n        map: this.map,\n        title: result.name,\n      });\n\n      marker.addListener('mouseover', () => {\n        this.showInfoBox(result, marker);\n      });\n\n      result.marker = marker;\n      return marker;\n    });\n\n    this.markerCluster = new MarkerClusterer(this.map, this.mapMarkers, {\n      imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m',\n      minimumClusterSize: 6,\n      maxZoom: SearchMapController.MARKERS_SWITCH_ZOOM,\n    });\n\n    this.profilesResult.forEach((result) => {\n      if (result.url === this.showProfileUrl) {\n        this.map.setZoom(SearchMapController.MARKERS_SWITCH_ZOOM + 1);\n        this.showInfoBox(result, result.marker);\n      }\n    });\n  }\n\n  /**\n   * Create Info Box display on marker hover\n   * @param result\n   * @param marker\n   */\n  private showInfoBox(result, marker) {\n    if (this.currentInfoBox) {\n      this.currentInfoBox.close();\n    }\n\n    const profileImage = result.logoWebPath ? '/media/cache/resolve/profile_thumbnail' + result.logoWebPath : this.defaultProfileImage;\n    const infoContent =\n      '<div class=\"text-center\" ><a target=\"_blank\" rel=\"noopener\" href=\"/p/' + result.url + '\">' + '<h3>' + result.name + '</h3><img src=\"' + profileImage + '\" /></a></div>';\n\n    this.currentInfoBox = new google.maps.InfoWindow();\n    this.currentInfoBox.setContent(infoContent);\n    this.currentInfoBox.open(this.map, marker);\n  }\n\n  /** Disable button on loading */\n  private setLoading(isLoading) {\n    this.loading = isLoading;\n\n    this.$filterForm.find('[name=submit]').prop('disabled', isLoading);\n  }\n\n  /** Get GET parameter */\n  static getUrlParameter(param, defaultValue: any = '') {\n    param = param.replace(/[\\[\\]]/g, '\\\\$&');\n    const regex = new RegExp('[?&]' + param + '(=([^&#]*)|&|#|$)'),\n      results = regex.exec(window.location.href);\n\n    if (!results || !results[2]) {\n      return defaultValue;\n    }\n    return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n  }\n\n  /** Random fuzz factor for items nearby */\n  static randomFuzzFactor() {\n    return Math.random() * (MARKER_MAX_FACTOR - MARKET_MIN_FACTOR) + MARKET_MIN_FACTOR;\n  }\n\n  /**\n   * Encodes the query parameters.\n   * @param {{}} object\n   * @return {string}\n   */\n  static makeUrl(queryString) {\n    let base,\n      queryStart = window.location.href.indexOf('?');\n\n    if (queryStart == -1) {\n      base = window.location.href + '?';\n    } else {\n      base = window.location.href.substr(0, queryStart + 1);\n    }\n\n    return base + queryString;\n  }\n}\n","import { IController } from 'angular';\n\n/**\n *\n */\nexport default class SponsoringChoiceController implements IController {\n  private value;\n\n  static $inject = ['$scope'];\n\n  /**\n   * Constructor.\n   *\n   * @param scope\n   */\n  constructor(scope) {\n    this.value = null;\n  }\n\n  public $onInit(): void {}\n\n  setValue(value) {\n    this.value = value;\n  }\n}\n","import angular, {\n    IController\n} from 'angular';\n/**\n* Controller to watchlist icon in the navbar\n*/\nexport default class NavWatchlistController implements IController {\n    static $inject = ['$scope', '$log', '$element', '$http'];\n    private $el;\n    private readonly csrfToken: string;\n    public showWatchlist = false;\n\n    constructor(private scope, private log: angular.ILogService, el: HTMLFormElement, private http: angular.IHttpService) {\n       this.$el = angular.element(el);\n       this.csrfToken = this.$el.data('csrf-token');\n       this.showWatchlist = this.$el.data('show-watchlist'); // set through symfony variable 'identity.showWatchlist inside twig template\n       this.$el.find('.hidden').removeClass('hidden');\n\n       // Listening to 'ProfileAddWatchProfileEvent' event with should be sent from headerBox.html.twig (on 'Watch profile' button click)\n        this.scope.$on('ProfileAddWatchProfileEvent', (event, data)=>{\n            if(data && data.addedNewProfile){\n                this.showWatchlist = true;\n        }\n        });\n\n         // Listening to 'ProfileStopWatchingProfileEvent' event with should be sent from headerBox.html.twig (on 'Stop watching' button click)\n        this.scope.$on('ProfileStopWatchingProfileEvent', (event, data)=>{\n           if(data && data.removedLastWatchedProfile){\n               this.showWatchlist = false;\n           }\n        });\n    }\n\n    public $onInit(): void {}\n\n    /**\n    * Enables Bootstrap tooltips on this element.\n    *\n    * @private\n     */\n    enableTooltips() {\n        this.$el.find('[data-toggle=\"tooltip\"]').tooltip();\n        }\n    }\n","import angular, { IController, IHttpPromiseCallbackArg } from 'angular';\nimport {IWatchlistProfileStatus, IWatchlistActionsResponse} from '../Model/requests';\n\nexport default class ProfileWatchlistController implements IController {\n  static $inject = ['$scope', '$rootScope', '$log', '$element', '$http'];\n\n  public el;\n  public readonly csrfToken: string;\n  public canWatch: boolean = false;\n  public isWatching: boolean = false;\n  public readonly profileUrl: string;\n\n  constructor(private $scope, private $rootScope, private $log: angular.ILogService, private $el: HTMLFormElement, private $http: angular.IHttpService) {\n      this.el = angular.element($el);\n      this.csrfToken = this.el.data('csrf-token');\n      this.profileUrl = this.el.data('watchlist-profile-url'); // set profile's url through symfony variable inside twig template\n      this.init();\n  }\n\n  public init() {\n      // Retrieve canWatch and isWatching values from backend\n      this.$http.get(Routing.generate('watchlist_profile_watch_status', {url: this.profileUrl}),{ headers: {'csrf_token':this.csrfToken}}).then(\n          (result: IHttpPromiseCallbackArg<IWatchlistProfileStatus>) => {\n              if(result && result.data){\n                  this.canWatch = result.data.canWatch;\n                  this.isWatching = result.data.isWatching;\n              }\n          },\n          (error) => {\n              this.$log.error(error);\n          }\n      );\n  }\n\n  public $onInit(): void {}\n    public startWatchingProfile(){\n        // First check if current state allows user to change state\n        if(this.canWatch && !this.isWatching) {\n            this.$http.post(Routing.generate('profile_start_watching', {url: this.profileUrl}),{},{headers: {'csrf_token':this.csrfToken}}).then(\n                (result: IHttpPromiseCallbackArg<IWatchlistActionsResponse>) => {\n                    if(result && result.data && result.data.success) {\n                        // send event to userPanel.html.twig -> to toggle watchlist star icon\n                        this.$rootScope.$broadcast('ProfileAddWatchProfileEvent', { addedNewProfile: true }); // only when controllers are not connected via hierarchy (parent-child)\n                        this.isWatching = true;\n                    }\n                },\n                (error) => {\n                    this.$log.error(error);\n                }\n            );\n        }\n    }\n\n    public stopWatchingProfile(){\n        // First check if current state allows user to change state\n        if(this.canWatch && this.isWatching) {\n            this.$http.post(Routing.generate('profile_stop_watching',{url: this.profileUrl}),{}, {headers: {'csrf_token':this.csrfToken}}).then(\n                (result: IHttpPromiseCallbackArg<IWatchlistActionsResponse>) => {\n                    if(result && result.data && result.data.success) {\n                        if(result.data.removedLast){\n                            // send event to userPanel.html.twig -> to toggle watchlist star icon\n                            this.$rootScope.$broadcast('ProfileStopWatchingProfileEvent', { removedLastWatchedProfile: true} );\n                        }\n                        this.isWatching = false;\n                    }\n                },\n                (error) => {\n                    this.$log.error(error);\n                }\n            );\n        }\n    }\n}\n","import angular from 'angular';\nimport BoxController from './BoxController';\nimport NotificationDropdownController from './NotificationDropdownController';\nimport RegistrationController from './RegistrationController';\nimport RegistrationExampleController from './RegistrationExampleController';\nimport SearchController from './SearchController';\nimport SearchMapController from './SearchMapController';\nimport SponsoringChoiceController from './SponsoringChoiceController';\nimport NavWatchlistController from './NavWatchlistController'\nimport ProfileWatchlistController from './ProfileWatchlistController';\n\nconst app = angular.module('sponsoo');\n\napp.controller('BoxController', BoxController);\napp.controller('NavigationDropdownController', NotificationDropdownController);\napp.controller('RegistrationController', RegistrationController);\napp.controller('RegistrationExampleController', RegistrationExampleController);\napp.controller('SearchController', SearchController);\napp.controller('SearchMapController', SearchMapController);\napp.controller('SponsoringChoiceController', SponsoringChoiceController);\napp.controller('NavWatchlistController', NavWatchlistController);\napp.controller('ProfileWatchlistController', ProfileWatchlistController);\n\nrequire('./CheckOut');\nrequire('./Profile');\n","import { IController } from 'angular';\n\nexport default class NegotiatingController implements IController {\n  static $inject = ['$scope', '$uibModal', '$element'];\n\n  /**\n   * Constructor.\n   *\n   * @param {Scope} $scope\n   * @param {{}} $uibModal\n   * @param {HTMLElement} el\n   */\n  constructor(private $scope, private $uibModal, el) {}\n\n  public $onInit(): void {}\n\n  public selectAction(template) {\n    this.$uibModal.open({\n      animation: true,\n      backdrop: 'static',\n      templateUrl: template,\n      size: 'lg',\n      controller: [\n        '$scope',\n        '$uibModalInstance',\n        'selectProfile',\n        ($scope, $modal, selectProfile) => {\n          Object.assign($scope, {\n            selectProfile: (template) => {\n              $modal.close('close');\n              selectProfile(template);\n            },\n            cancel: () => {\n              $modal.dismiss('cancel');\n            },\n          });\n        },\n      ],\n      resolve: {\n        selectProfile: () => this.selectProfile.bind(this),\n      },\n    });\n  }\n\n  private selectProfile(template) {\n    this.$uibModal.open({\n      animation: true,\n      backdrop: 'static',\n      templateUrl: template,\n      size: 'lg',\n      controller: [\n        '$scope',\n        '$uibModalInstance',\n        ($scope, $modal) => {\n          Object.assign($scope, {\n            cancel: () => {\n              $modal.dismiss('cancel');\n            },\n          });\n        },\n      ],\n    });\n  }\n}\n","/**\n * Controller to handle club search forms.\n */\nimport angular, { IController } from 'angular';\n\nexport default class ProfilePageController implements IController {\n  static $inject = ['$scope', '$log', '$element', '$http'];\n\n  showSponsoreeContactModal: Function;\n\n  private $el;\n  private logoModal;\n  private _sponsoree;\n  private template;\n  private scoreCtrl;\n\n  /**\n   */\n  constructor(private scope, private log: angular.ILogService, el: HTMLFormElement, private http: angular.IHttpService) {\n    this.$el = angular.element(el);\n    this.sponsoree = this.$el.data('sponsoree');\n\n    // Reset logo modal.\n    this.logoModal = null;\n\n    this.scope.template = null;\n\n    this.enableTooltips();\n  }\n\n  public $onInit(): void {}\n\n  /**\n   * @returns {String|Object}\n   */\n  get sponsoree() {\n    return this._sponsoree;\n  }\n\n  /**\n   * @param {String|Object} sponsoree\n   * @public\n   */\n  set sponsoree(sponsoree) {\n    // Decode JSON if needed.\n    if (typeof sponsoree === 'string') {\n      sponsoree = angular.fromJson(sponsoree.replace(/[\\n\\r]/g, ''));\n    }\n\n    // Set sponsoree field.\n    this.scope.sponsoree = sponsoree;\n    this._sponsoree = sponsoree;\n\n    // Set current score on score controller.\n    if (this.scoreCtrl) {\n      this.scoreCtrl.valueNow = sponsoree.score;\n    }\n  }\n\n  get sponsoreeUrl() {\n    return this._sponsoree.url;\n  }\n\n  /**\n   * @param {ProfileScoreController} scoreCtrl\n   * @public\n   */\n  setScore(scoreCtrl) {\n    this.scoreCtrl = scoreCtrl;\n    if (this._sponsoree) {\n      this.scoreCtrl.valueNow = this._sponsoree.score;\n    }\n\n    this.scope.$watch('sponsoree.score', this.onSponsoreeUpdated.bind(this));\n  }\n\n  /**\n   * Methods taken when the sponsoree was updated.\n   */\n  onSponsoreeUpdated() {\n    this.scoreCtrl.valueNow = this._sponsoree.score;\n  }\n\n  /**\n   * Sends a profile patch to the server.\n   *\n   * @param {String} profileUrl\n   * @param {*} patchData\n   * @param {String} csrfToken\n   * @return {HttpPromise}\n   */\n  patchProfile(profileUrl, patchData, csrfToken) {\n    const url = Routing.generate('profile_patch', { url: profileUrl });\n    const data = {\n      data: patchData,\n      csrfToken: csrfToken,\n    };\n\n    return this.http.patch(url, data);\n  }\n\n  /**\n   * Set the new profile score value.\n   *\n   * @param {Number} value\n   */\n  setScoreValue(value) {\n    this.sponsoree.score = value;\n    angular.element('#sponsoree_edit_score').val(this.sponsoree.score);\n  }\n\n  /**\n   * Opens the logo modal.\n   */\n  openLogoModal() {\n    this.logoModal.show();\n  }\n\n  /**\n   * Enables Bootstrap tooltips on this element.\n   *\n   * @private\n   */\n  enableTooltips() {\n    this.$el.find('[data-toggle=\"tooltip\"]').tooltip();\n  }\n}\n","import angular, { IController } from 'angular';\nimport { IModalService } from 'angular-ui-bootstrap';\n\ninterface NewsfeedLikes {\n  counts: { [key: string]: number };\n  submitted: { [key: string]: boolean };\n  likes: any[];\n  totalCount: number;\n  liked: boolean;\n}\n\nexport default class NewsfeedController implements IController {\n\n  static $inject = ['$scope', '$element', '$http', '$uibModal'];\n\n  public newsfeedLikes: { [key: string]: NewsfeedLikes };\n\n  private newsfeedIds: string[] = [];\n  private loading: boolean;\n  private readonly profileUrl: string;\n  private readonly $el;\n  private readonly csrfToken: string;\n\n  public REACTION_TYPES = {\n    'thumbsUp': 'fa-regular fa-thumbs-up',\n    'laugh':    'fa-regular fa-laugh-squint',\n    'sad':      'fa-regular fa-sad-tear',\n    'star':     'fa-regular fa-star',\n    'heart':    'fa-regular fa-heart',\n    'trophy':   'fa-regular fa-trophy-alt',\n    'rocket':   'fa-regular fa-rocket',\n  };\n\n  constructor(public $scope, public element: HTMLDivElement, public http: angular.IHttpService, public $uibModal: IModalService) {\n    this.$el        = $(element);\n    this.profileUrl = this.$el.data('newsfeed-profile-url');\n    this.csrfToken  = $('.newsfeed-csrf-js').data('csrf-token');\n\n    this.loading       = true;\n    this.newsfeedLikes = {};\n  }\n\n  public async init(newsfeedItemIds) {\n    this.newsfeedIds = newsfeedItemIds;\n    this.getLikes(newsfeedItemIds);\n  }\n\n  $onInit() {}\n\n  public handleLike(newsfeedItemId, likeType) {\n    if (!this.newsfeedLikes[newsfeedItemId]) {\n      return;\n    }\n\n    if (this.newsfeedLikes[newsfeedItemId].submitted[likeType]) {\n      this.updateLikeCounts(newsfeedItemId, likeType, false);\n      this.submitUnlikeRequest(newsfeedItemId, likeType);\n    } else {\n      this.updateLikeCounts(newsfeedItemId, likeType, true);\n      this.submitLikeRequest(newsfeedItemId, likeType);\n    }\n  }\n\n  /**\n   * Opens modal containing info about likes\n   * @param newsfeedItemId\n   */\n  openModal(newsfeedItemId) {\n    if (!this.newsfeedLikes[newsfeedItemId]) {\n      return;\n    }\n\n    let likes = this.newsfeedLikes[newsfeedItemId].likes || [];\n\n    const modalInstance = this.$uibModal.open({\n      size:         'md',\n      animation:    true,\n      keyboard:     true,\n      templateUrl:  'likesModal.html',\n      controller:   'LikesModalController',\n      controllerAs: 'likesModalCtrl',\n      scope:        this.$scope,\n      resolve:      {\n        likes: function () {\n          return likes;\n        },\n      },\n    }).result.then(function () {\n    }, function () {\n    });\n  }\n\n  /**\n   * Generates and sends a GET request for likes\n   */\n  private getLikes(newsfeedItemIds) {\n    const url = Routing.generate('profile_likes', {\n      url: this.profileUrl,\n      ids: newsfeedItemIds.join(','),\n    });\n\n    this.http.get(url).then(response => {\n      this.getLikesResponse(newsfeedItemIds, response);\n    });\n  }\n\n  /**\n   * Handles response from query that returns likes\n   * @param response\n   */\n  private getLikesResponse(newsfeedItemIds, response) {\n    const reponseLikes = Array.isArray(response.data) ? {} : response.data;\n\n    newsfeedItemIds.forEach(newsfeedId => {\n      const apiLikes = reponseLikes[newsfeedId] || [];\n\n      const newsfeedLikes: NewsfeedLikes = this.createEmptyNewsLikes();\n\n      this.newsfeedLikes[newsfeedId] = this.fillLikes(newsfeedLikes, apiLikes);\n    });\n    this.loading = false;\n  }\n\n  /**\n   * Sends request for inserting a new like\n   * @param likeType\n   */\n  private submitLikeRequest(newsfeedItemId, likeType) {\n    const url = Routing.generate('submit_like', {\n      url: this.profileUrl,\n      ids: this.newsfeedIds.join(','),\n    });\n\n    const payload = {\n      newsfeedItemId: newsfeedItemId,\n      likeType:       likeType,\n      token:          this.csrfToken,\n    };\n\n    this.http.post(url, payload).then(response => {\n      this.updateLikes(newsfeedItemId, response);\n    });\n  }\n\n  /**\n   * Sends request for removing a like\n   * @param likeType\n   */\n  private submitUnlikeRequest(newsfeedItemId, likeType) {\n    const url     = Routing.generate('remove_like', {\n      url: this.profileUrl,\n      ids: this.newsfeedIds.join(','),\n    });\n    const payload = {\n      newsfeedId: newsfeedItemId,\n      likeType:   likeType,\n      token:      this.csrfToken,\n    };\n\n    this.http.post(url, payload).then(response => {\n      this.updateLikes(newsfeedItemId, response);\n    });\n  }\n\n  /**\n   * Updates likes variable\n   * @param likes\n   */\n  private updateLikes(newsfeedItemId, response) {\n    this.getLikesResponse(this.newsfeedIds, response);\n  }\n\n  private updateLikeCounts(newsfeedItemId, likeType, isAdd = true) {\n    const countChange = isAdd ? 1 : 0;\n\n    if (!this.newsfeedLikes[newsfeedItemId]) {\n      return;\n    }\n\n    const myLikeTypes = Object.keys(this.newsfeedLikes[newsfeedItemId].submitted).filter(type => {\n      return this.newsfeedLikes[newsfeedItemId].submitted[type];\n    });\n\n    myLikeTypes.forEach(likeType => {\n      this.newsfeedLikes[newsfeedItemId].counts[likeType]--;\n    });\n\n    this.newsfeedLikes[newsfeedItemId].totalCount += -myLikeTypes.length + countChange;\n    this.newsfeedLikes[newsfeedItemId].liked     = isAdd;\n    this.newsfeedLikes[newsfeedItemId].submitted = { [likeType]: isAdd };\n    this.newsfeedLikes[newsfeedItemId].counts[likeType] += countChange;\n  }\n\n  public numberOfLikes(newsfeedItemId): number {\n    if (!this.newsfeedLikes[newsfeedItemId]) {\n      return 0;\n    }\n\n    return this.newsfeedLikes[newsfeedItemId].totalCount;\n  }\n\n  public liked(newsfeedItemId): boolean {\n    if (!this.newsfeedLikes[newsfeedItemId]) {\n      return false;\n    }\n\n    return this.newsfeedLikes[newsfeedItemId].liked;\n  }\n\n  public likesCount(newsfeedItemId, likeType): number {\n    if (!this.newsfeedLikes[newsfeedItemId]) {\n      return 0;\n    }\n\n    return this.newsfeedLikes[newsfeedItemId].counts[likeType];\n  }\n\n  public likeSubmitted(newsfeedItemId, likeType): boolean {\n    if (!this.newsfeedLikes[newsfeedItemId]) {\n      return false;\n    }\n\n    return this.newsfeedLikes[newsfeedItemId].submitted[likeType];\n  }\n\n  private createEmptyNewsLikes() {\n    const newsLikes: NewsfeedLikes = {\n      counts:     {},\n      submitted:  {},\n      likes:      [],\n      totalCount: 0,\n      liked:      false,\n    };\n\n    Object.keys(this.REACTION_TYPES).forEach(likeType => {\n      newsLikes.counts[likeType]    = 0;\n      newsLikes.submitted[likeType] = false;\n    });\n\n    return newsLikes;\n  }\n\n  private fillLikes(newsLikes: NewsfeedLikes, likes) {\n    likes.forEach(like => {\n      newsLikes.counts[like.likeType]++;\n      newsLikes.submitted[like.likeType] = newsLikes.submitted[like.likeType] || like.isMy;\n      newsLikes.liked                    = newsLikes.liked || like.isMy;\n    });\n\n    newsLikes.likes      = likes;\n    newsLikes.totalCount = likes.length;\n\n    return newsLikes;\n  }\n}\n","import angular from 'angular';\nimport { RouterModule, Routes } from 'angular-route';\nimport ProfileEditController from './EditController';\nimport ProfileNegotiatingController from './NegotiatingController';\nimport ProfilePageController from './PageController';\nimport ProfileRegistrationController from './RegistrationController';\nimport ProfileScoreBadgeController from './ScoreBadgeController';\nimport ProfileScoreController from './ScoreController';\nimport ProfileTeaserController from './TeaserController';\nimport NewsfeedController            from './NewsfeedController';\nimport LikesModalController          from './LikesModalController';\n\nlet app: angular.IModule;\napp = angular.module('sponsoo');\napp.controller('ProfileNegotiatingController', ProfileNegotiatingController);\napp.controller('ProfilePageController', ProfilePageController);\napp.controller('NewsfeedController', NewsfeedController);\n","import angular from 'angular';\n\nexport default [\n  '$http',\n  '$timeout',\n  '$q',\n  function ($http, $timeout, $q) {\n    const directiveId = 'spnRemoteValidate';\n\n    return {\n      restrict: 'A',\n      require: ['^form', 'ngModel'],\n      scope: {\n        ngRemoteInterceptors: '=?',\n      },\n      link: function (scope, el, attrs, ctrls) {\n        var cache = {},\n          handleChange,\n          setValidation,\n          addToCache,\n          request,\n          shouldProcess,\n          ngForm = ctrls[0],\n          ngModel = ctrls[1],\n          options: any = {\n            ngRemoteThrottle: 400,\n            ngRemoteMethod: 'POST',\n          };\n\n        angular.extend(options, attrs);\n        //TODO: Use Chain of Responsibility to reduce complexity.\n        if (options.spnRemoteValidate.charAt(0) === '[') {\n          options.urls = eval(options.spnRemoteValidate);\n        } else if (options.spnRemoteValidate.charAt(0) === '{') {\n          options.keys = eval('(' + options.spnRemoteValidate + ')');\n          options.urls = Object.keys(options.keys);\n        } else {\n          options.urls = [options.spnRemoteValidate];\n        }\n\n        addToCache = function (response) {\n          var value = response[0].data.value;\n          if (cache[value]) {\n            return cache[value];\n          }\n          cache[value] = response;\n        };\n\n        shouldProcess = function (value) {\n          var otherRulesInValid = false;\n          for (var p in ngModel.$error) {\n            var checkedKey =\n              !options.hasOwnProperty('keys') ||\n              !Object.keys(options.keys).filter(function (k) {\n                return options.keys[k] === p;\n              })[0];\n            if (ngModel.$error[p] && p != directiveId && checkedKey) {\n              otherRulesInValid = true;\n              break;\n            }\n          }\n          return !(ngModel.$pristine || otherRulesInValid);\n        };\n\n        setValidation = function (response, skipCache) {\n          var i = 0,\n            l = response.length,\n            useKeys = options.hasOwnProperty('keys'),\n            isValid = true;\n          for (; i < l; i++) {\n            if (scope.ngRemoteInterceptors && scope.ngRemoteInterceptors.response) {\n              response[i] = scope.ngRemoteInterceptors.response(response[i]);\n            }\n\n            if (!response[i].data.isValid) {\n              isValid = false;\n              if (!useKeys) {\n                break;\n              }\n            }\n\n            var canSetKey = useKeys && response[i].hasOwnProperty('config') && options.keys[response[i].config.url];\n\n            if (canSetKey) {\n              var key = options.keys[response[i].config.url];\n              ngModel.$setValidity(key, response[i].data.isValid);\n            }\n          }\n          if (!skipCache) {\n            addToCache(response);\n          }\n          ngModel.$setValidity(directiveId, isValid);\n          ngModel.$processing = ngModel.$pending = ngForm.$pending = false;\n        };\n\n        handleChange = function (value) {\n          if (typeof value === 'undefined' || value === '') {\n            ngModel.$setPristine();\n            return;\n          }\n\n          if (!shouldProcess(value)) {\n            return setValidation(\n              [\n                {\n                  data: {\n                    isValid: true,\n                    value: value,\n                  },\n                },\n              ],\n              true\n            );\n          }\n\n          if (cache[value]) {\n            return setValidation(cache[value], true);\n          }\n\n          //Set processing now, before the delay.\n          //Check first to reduce DOM updates\n          if (!ngModel.$pending) {\n            ngModel.$processing = ngModel.$pending = ngForm.$pending = true;\n          }\n\n          if (request) {\n            $timeout.cancel(request);\n          }\n\n          request = $timeout(function () {\n            var calls = [],\n              i = 0,\n              l = options.urls.length,\n              toValidate = { value: value },\n              httpOpts: any = { method: options.ngRemoteMethod };\n\n            if (scope[el[0].name + 'SetArgs']) {\n              toValidate = scope[el[0].name + 'SetArgs'](value, el, attrs, ngModel);\n            }\n\n            if (options.ngRemoteMethod == 'POST') {\n              httpOpts.data = toValidate;\n            } else {\n              httpOpts.params = toValidate;\n            }\n\n            for (; i < l; i++) {\n              httpOpts.url = options.urls[i];\n\n              if (scope.ngRemoteInterceptors && scope.ngRemoteInterceptors.request) {\n                httpOpts = scope.ngRemoteInterceptors.request(httpOpts);\n              }\n\n              calls.push($http(httpOpts));\n            }\n\n            $q.all(calls).then(setValidation);\n          }, options.ngRemoteThrottle);\n          return true;\n        };\n\n        //ngModel.$parsers.unshift( handleChange );\n        scope.$watch(function () {\n          return ngModel.$viewValue;\n        }, handleChange);\n      },\n    };\n  },\n];\n","import { Cropping } from '../Model';\n\nexport class CroppingService {\n  static $inject = ['$uibModal'];\n\n  /**\n   * Constructor.\n   */\n  constructor(private $uibModal) {}\n\n  /**\n   * Crops an image file by displaying a modal where the user can\n   * check options.\n   *\n   * @param {File}     imageFile  The image file to be cropped.\n   * @param {String}   ratio      Something like `1:1` or `3:1`.\n   * @param {Function} [then]     Will be executed when cropping was successful.\n   * @param {Function} [error]    Will be executed when cropping was canceled.\n   * @param {Function} [closed]   Will be executed when cropping was closed.\n   */\n  crop(imageFile, ratio, then, error, closed) {\n    const aspectRatio = this.makeAspectRatio(ratio);\n    const instance = this.$uibModal.open({\n      animation: true,\n      backdrop: 'static',\n      templateUrl: 'croppingModal.html',\n      controllerAs: 'croppingModal',\n      controller: 'CroppingModalController',\n      size: 'lg',\n      resolve: {\n        imageFile: () => imageFile,\n        aspectRatio: () => aspectRatio,\n      },\n    });\n\n    then && instance.result.then(then);\n    error && instance.result.error(error);\n    closed && instance.closed.then(closed);\n  }\n\n  /**\n   * @param {String} ratio\n   * @return {Number}\n   * @private\n   */\n  private makeAspectRatio(ratio) {\n    const aspectRatio = ratio.split(':');\n    return aspectRatio[0] / aspectRatio[1];\n  }\n}\n\nexport const CroppingModalController = [\n  '$scope',\n  '$uibModalInstance',\n  'imageFile',\n  'aspectRatio',\n  (scope, modal, imageFile, aspectRatio) => {\n    scope.ok = () => {\n      modal.close(scope.cropping);\n    };\n\n    scope.cancel = () => {\n      modal.dismiss('cancel');\n    };\n\n    scope.onCrop = (event) => {\n      scope.cropping = new Cropping(scope.imageFile, event.detail);\n    };\n\n    scope.cropping = null;\n    scope.aspectRatio = aspectRatio;\n    scope.imageFile = imageFile;\n    scope.imageSrc = URL.createObjectURL(scope.imageFile);\n  },\n];\n","import angular from 'angular';\nimport { Form } from '../Model';\n\nexport class SymfonyFormService {\n  private httpService;\n\n  /**\n   * @param {$http} httpService\n   */\n  constructor(httpService) {\n    this.httpService = httpService;\n  }\n\n  /**\n   * Creates a new symfony form.\n   *\n   * @param {string} name\n   * @param {string} targetUrl\n   * @param {string} csrfToken\n   * @return {Form}\n   */\n  createForm(name, targetUrl, csrfToken) {\n    return new Form(name, targetUrl, csrfToken);\n  }\n\n  /**\n   * Uploads a form.\n   *\n   * @param {Form} form\n   * @return {HttpPromise}\n   */\n  sendForm(form) {\n    const data = new FormData();\n    angular.forEach(form.all(), function (element, index) {\n      data.append(form.name + '[' + index + ']', element);\n    });\n\n    // Configure.\n    const config = {\n      transformRequest: angular.identity,\n      headers: { 'Content-Type': undefined },\n    };\n\n    // Send request.\n    return this.httpService.post(form.targetUrl, data, config);\n  }\n}\n\nexport default ['$http', ($http) => new SymfonyFormService($http)];\n","import angular from 'angular';\nimport { CroppingModalController, CroppingService } from './CroppingService';\nimport SymfonyFormService from './SymfonyFormService';\n\nconst app = angular.module('sponsoo');\n\napp.factory('spnSymfonyForm', SymfonyFormService);\napp.service('spnCropping', CroppingService);\napp.controller('CroppingModalController', CroppingModalController);\n","export class Cropping {\n  private image: File;\n  private x: number;\n  private y: number;\n  private width: number;\n  private height: number;\n  private rotate: number;\n\n  /**\n   * @param {File} imageFile\n   * @param {{x, y, width, height, rotate}} options\n   */\n  constructor(imageFile: File, options) {\n    this.image = imageFile;\n    this.x = Math.max(0, options.x || 0);\n    this.y = Math.max(0, options.y || 0);\n    this.width = Math.max(1, options.width || 1);\n    this.height = Math.max(1, options.height || 1);\n    this.rotate = options.rotate || 0;\n\n    if (this.x < 0) {\n      this.x = 0;\n    }\n  }\n}\n","import angular from 'angular';\nimport modal from 'angular-ui-bootstrap/src/modal';\n\n// Install fancybox\nrequire('fancybox')($);\n\n// Fetch locale from <html>-Element.\nconst locale = $('html').attr('lang');\n\n// Angular Module Initialization\nconst configuration = function ($interpolateProvider) {\n  $interpolateProvider.startSymbol('[[').endSymbol(']]');\n};\nconfiguration.$inject = ['$interpolateProvider'];\n\nconst app = angular.module('sponsoo', ['sponsoo_trans', modal, 'ngSanitize', 'angular.filter', 'dc.endlessScroll']).config(configuration);\n\napp.factory('$routing', () => {\n  return Routing;\n});\n\napp.filter('replace', function ReplaceFilterFactory() {\n  return function ReplaceFilter(input, from, to) {\n    return input.replace(from, to);\n  };\n});\n\n/**\n * Character counters\n */\n$('textarea.form-counting').on('keyup', function EventListener() {\n  const id = $(this).attr('id');\n  const label = $('label[for=\"' + id + '\"], h4[data-count=\"' + id + '\"]');\n  let pattern = label.data('counter-pattern');\n  const needle = '%counter%';\n  const maxLength = parseInt($(this).attr('maxlength'), 10);\n  const ctr = maxLength - $(this).val().toString().length;\n\n  if (typeof pattern === 'undefined') {\n    pattern = label.html();\n    label.data('counter-pattern', pattern);\n  }\n\n  label.html(pattern.replace(needle, ctr));\n});\n\n$('textarea.form-counting-up').on('focus keyup', function EventListener() {\n  const id = $(this).attr('id');\n  const label = $('div[data-count=\"' + id + '\"]');\n  let pattern = label.data('counter-pattern');\n  const needle = '%counter%';\n  const ctr = $(this).val().toString().length;\n  if (typeof pattern === 'undefined') {\n    pattern = label.html();\n    label.data('counter-pattern', pattern);\n  }\n  label.html(pattern.replace(needle, ctr));\n});\n\n$('textarea.form-counter-trigger')\n  .on('focus', function EventListener() {\n    const id = $(this).attr('id');\n    const label = $('div[data-count=\"' + id + '\"]');\n    label.show();\n  })\n  .on('blur', function EventListener() {\n    const id = $(this).attr('id');\n    const label = $('div[data-count=\"' + id + '\"]');\n    label.hide();\n  });\n\n/**\n * Executed as soon as DOM is ready.\n *\n * Counter on auction page\n * FancyBox and Ck-Editor Plugins\n */\n$(() => {\n  /**\n   * Default dragover cursor.\n   */\n  document.body.addEventListener('dragover', function (e: DragEvent) {\n    if (e.dataTransfer.types[0] === 'Files') {\n      e.stopPropagation();\n      e.preventDefault();\n\n      e.dataTransfer.dropEffect = 'none';\n    }\n  });\n\n  // Enable Fancybox.\n  $('.fancybox').fancybox();\n\n  // Set language of select2.\n  // FIXME: Does not work with select2 4!\n  // $.extend($.fn.select2.defaults, $.fn.select2.locales[locale]);\n\n  // Enable select2.\n  $('.js-advanced-select').select2({\n    width: '100%',\n  });\n  $('.select2').select2({\n    width: '100%',\n  });\n\n  // Enable Select2 with AJAX.\n  $('[js-ajax]').each((id, element) => {\n    $(element).select2({\n      width: '100%',\n      ajax: {\n        url: $(element).attr('js-ajax'),\n        dataType: 'json',\n        delay: 250,\n        data: (params) => {\n          return {\n            q: params.term,\n          };\n        },\n        processResults: (data) => {\n          return {\n            results: data,\n          };\n        },\n        cache: true,\n      },\n      minimumInputLength: 3,\n    });\n\n    $(element)\n      .data('select2')\n      .on('results:message', function EventListener() {\n        this.dropdown._positionDropdown();\n      });\n  });\n\n  $('textarea.form-counting').trigger('keyup');\n\n  // Enable tooltips.\n  $('.tooltip-trigger').tooltip();\n\n  // Enable popovers.\n  $('[data-toggle=\"popover\"]').popover();\n\n  $('#profile-perma-link')\n    .on('focus', function EventListener(e) {\n      e.preventDefault();\n      $(this).select();\n    })\n    .on('mouseup', function EventListener(e) {\n      e.preventDefault();\n    });\n\n  $('#delete-offer-btn').on('click', (event) => {\n    const confirm = window.confirm($(event.target).data('message'));\n    if (!confirm) {\n      event.preventDefault();\n      return false;\n    }\n\n    return true;\n  });\n\n  $('.roll-up-next').on('click', function EventListener(e) {\n    e.preventDefault();\n    $(this).next().slideDown();\n  });\n});\n\nrequire('./Controller');\nrequire('./Directives');\nrequire('./Model');\nrequire('./Service');\n\n// Async angular app init\nangular.element(function () {\n  const module = document.body.dataset['ngapp'];\n  if (module) {\n    angular.bootstrap(document, [module]);\n  }\n});\n","import { IController, IScope } from 'angular';\nimport { IModalService } from 'angular-ui-bootstrap';\nimport { SymfonyFormService } from '../../Service/SymfonyFormService';\n\nexport default class CartController implements IController {\n  static $inject = ['$scope', '$uibModal', '$routing', 'spnSymfonyForm'];\n  private csrfToken: string;\n  private $container: any;\n\n  constructor(private $scope: IScope, private $uibModal: IModalService, private $routing: Routing, private symfonyForm: SymfonyFormService) {\n    this.$container = $('.container-registration-content');\n  }\n\n  public $onInit(): void {}\n\n  init(csrfToken: string) {\n    this.csrfToken = csrfToken;\n  }\n\n  editVat(vatNumber?: string) {\n    const instance = this.$uibModal.open({\n      animation: true,\n      backdrop: 'static',\n      templateUrl: 'editVat.html',\n      size: 'lg',\n      controller: [\n        '$scope',\n        '$uibModalInstance',\n        'vatNumber',\n        (scope, modal, vatNumber) => {\n          Object.assign(scope, {\n            vatNumber: vatNumber,\n            ok: () => modal.close(scope.vatNumber),\n            cancel: () => modal.dismiss('cancel'),\n          });\n        },\n      ],\n      resolve: {\n        vatNumber: () => vatNumber,\n      },\n    });\n\n    const result = instance.result;\n    result.then((vatNumber) => {\n      const targetUrl = this.$routing.generate('checkOut_changeVat', {});\n      const form = this.symfonyForm.createForm('check_out_vat', targetUrl, this.csrfToken);\n      form.setAll({ vatNumber });\n\n      const promise = this.symfonyForm.sendForm(form);\n      promise.then((response) => {\n        // ToDo: Changing HTML breaks Angular scripts.\n        //const data = response.data;\n        //this.$container.html(data);\n        location.reload();\n      });\n    });\n  }\n}\n","import angular from 'angular';\nimport CheckOutCartController from './CartController';\n\nconst app = angular.module('sponsoo');\napp.controller('CheckOutCartController', CheckOutCartController);\n"],"names":["CheckOutAddressDirective","constructor","scope","element","attrs","this","$el","$","$container","defaultPrototype","html","formPrototype","spnCheckOutAddress","checked","prop","on","clickCheckbox","bind","$timeout","link","$scope","el","attr","empty","cropper","aspectRatio","preview","center","movable","rotatable","scalable","zoomable","crop","onCrop","DIRECTIVE_NAME","FileSelectorDirective","enabled","data","expression","spnFileSelector","accept","spnAccept","maxFileSize","spnMaxFileSize","prepareSelection","$elt","$uploadsInput","e","stopPropagation","preventDefault","files","replaceWith","clone","$files","$selector","i","file","File","size","alert","$eval","append","click","css","enable","disable","fn","method","each","selector","OffersDirective","spnOffers","index","find","length","onAddClick","onRemoveClick","addOffer","event","newForm","replace","$newFormLi","select2","target","parents","remove","ProfileDirective","attributes","profile","spnProfile","console","log","SocialMediaDataDirective","compile","spnSocialMediaData","onClickAdd","removeSocialMediaDatumForm","addSocialMediaDatumForm","network","setValue","$compile","restrict","SuccessDirective","hasSuccessExpr","spnSuccess","$watch","hasSuccess","toggleClass","$icon","iconFunc","after","app","directive","require","ngModel","ck","versionCheck","$apply","$setViewValue","getData","$render","setData","$modelValue","CropperDirective","spnPasswordVerify","elem","ctrl","$viewValue","value","$parsers","unshift","viewValue","$setValidity","RemoteValidateDirective","url","picture","name","description","FB","ui","href","title","response","slickOptions","slick","responsive","breakpoint","settings","slidesToShow","slidesToScroll","key","JSON","parse","params","locale","encodeURIComponent","push","via","text","hashtags","join","window","open","Form","targetUrl","csrfToken","_name","_targetUrl","_token","set","param","setAll","values","get","all","BoxController","_appendixShown","_closeHandler","closeAppendix","$onInit","appendixShown","appendix","addClass","slideDown","slideUp","removeClass","off","expand","footer","buttons","toggleAppendix","$inject","NotificationDropdownController","$document","http","displayNotificationDropdown","clickOutside","toggleDropdown","innerWidth","contains","is","hideDropdown","markAsRead","id","markAllAsRead","ids","preventNavigation","Routing","generate","payload","post","headers","then","forEach","catch","RegistrationController","user","username","password","email","RegistrationExampleController","$element","init","closeWindow","close","SearchController","pagination","query","getQuery","publicRequest","parseInt","val","endlessScrollingEnabled","loading","document","onScrollDocument","hash","queryStart","location","indexOf","hashes","slice","split","decodeURIComponent","endsWith","substring","makeQuery","object","base","substr","Array","height","offset","top","scrollTop","onScrollNext","page","Accept","readPaginationHeaders","status","pageCount","totalItemCount","itemNumberPerPage","color1","color2","color3","color5","color6","color7","elementType","stylers","color","visibility","featureType","weight","MARKET_MIN_FACTOR","SearchMapController","mapMarkers","profilesResult","$mapEl","$filterForm","$zipCodeInput","defaultProfileImage","searchApiUri","transMyLocation","showProfileUrl","getUrlParameter","apiKey","initMap","reloadProfiles","reload","setLoading","error","google","googleMaps","maps","lat","lng","getZipcodeLocation","map","Map","zoom","LatLng","mapTypeId","styles","setMapCenterAndLoadProfiles","zipcodeValue","parts","includes","setMapCenterInForm","debug","drawMyLocationMarker","navigator","geolocation","getCurrentPosition","setMyGeolocation","warn","position","userLocation","coords","latitude","longitude","setCenter","myLocationOption","Option","trigger","userLocationMarker","Marker","infowindow","InfoWindow","content","addListener","currentInfoBox","queryString","serialize","history","pushState","makeUrl","loadProfiles","drawProfilesOnMap","markerCluster","clearMarkers","m","setMap","result","marker","randomFuzzFactor","showInfoBox","imagePath","minimumClusterSize","maxZoom","MARKERS_SWITCH_ZOOM","setZoom","infoContent","logoWebPath","setContent","isLoading","defaultValue","results","RegExp","exec","Math","random","SponsoringChoiceController","NavWatchlistController","showWatchlist","$on","addedNewProfile","removedLastWatchedProfile","enableTooltips","tooltip","ProfileWatchlistController","$rootScope","$log","$http","canWatch","isWatching","profileUrl","startWatchingProfile","success","$broadcast","stopWatchingProfile","removedLast","controller","NegotiatingController","$uibModal","selectAction","template","animation","backdrop","templateUrl","$modal","selectProfile","Object","assign","cancel","dismiss","resolve","ProfilePageController","sponsoree","logoModal","_sponsoree","scoreCtrl","valueNow","score","sponsoreeUrl","setScore","onSponsoreeUpdated","patchProfile","patchData","patch","setScoreValue","openLogoModal","show","NewsfeedController","newsfeedIds","REACTION_TYPES","newsfeedLikes","newsfeedItemIds","getLikes","handleLike","newsfeedItemId","likeType","submitted","updateLikeCounts","submitUnlikeRequest","submitLikeRequest","openModal","likes","keyboard","controllerAs","getLikesResponse","reponseLikes","isArray","newsfeedId","apiLikes","createEmptyNewsLikes","fillLikes","token","updateLikes","isAdd","countChange","myLikeTypes","keys","filter","type","counts","totalCount","liked","numberOfLikes","likesCount","likeSubmitted","newsLikes","like","isMy","$q","directiveId","ngRemoteInterceptors","ctrls","cache","handleChange","setValidation","addToCache","request","shouldProcess","ngForm","options","ngRemoteThrottle","ngRemoteMethod","spnRemoteValidate","charAt","urls","eval","otherRulesInValid","p","$error","checkedKey","hasOwnProperty","k","$pristine","skipCache","l","useKeys","isValid","config","$processing","$pending","calls","toValidate","httpOpts","$setPristine","CroppingService","imageFile","ratio","closed","makeAspectRatio","instance","CroppingModalController","modal","ok","cropping","Cropping","detail","imageSrc","URL","createObjectURL","SymfonyFormService","httpService","createForm","sendForm","form","FormData","transformRequest","undefined","factory","service","image","x","max","y","width","rotate","configuration","$interpolateProvider","startSymbol","endSymbol","input","from","to","label","pattern","ctr","hide","body","addEventListener","dataTransfer","types","dropEffect","fancybox","ajax","dataType","delay","q","term","processResults","minimumInputLength","dropdown","_positionDropdown","popover","select","confirm","next","module","dataset","CartController","$routing","symfonyForm","editVat","vatNumber"],"sourceRoot":""}