(function webpackUniversalModuleDefinition(root, factory) {
	if(typeof exports === 'object' && typeof module === 'object')
		module.exports = factory(require("angular"));
	else if(typeof define === 'function' && define.amd)
		define(["angular"], factory);
	else {
		var a = typeof exports === 'object' ? factory(require("angular")) : factory(root["angular"]);
		for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
	}
})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_3__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, {
/******/ 				configurable: false,
/******/ 				enumerable: true,
/******/ 				get: getter
/******/ 			});
/******/ 		}
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 2);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (immutable) */ __webpack_exports__["e"] = nullCheck;
/* unused harmony export numberCheck */
/* harmony export (immutable) */ __webpack_exports__["b"] = isNull;
/* harmony export (immutable) */ __webpack_exports__["d"] = isString;
/* harmony export (immutable) */ __webpack_exports__["c"] = isNumber;
/* harmony export (immutable) */ __webpack_exports__["a"] = isArray;
/* unused harmony export controlTypeCheck */

function nullCheck(val, msg) {
    if (isNull(val)) {
        throw new Error(msg);
    }
}

function numberCheck(val, msg) {
    if (isNumber(val)) {
        throw new Error(msg);
    }
}

function isNull(obj) {
    return obj === null || obj === undefined;
}

function isString(obj) {
    return Object.prototype.toString.call(obj) === '[object String]';
}

function isNumber(obj) {
    return Object.prototype.toString.call(obj) === '[object Number]';
}

function isArray(obj) {
    return Object.prototype.toString.call(obj) === '[object Array]';
}

var CONTROL_TYPS = ['maptype', 'overview', 'scale', 'toolbar'];
function controlTypeCheck(type) {
    if (CONTROL_TYPS.indexOf((type || '').toLowerCase()) < 0) {
        throw new Error('control type should be one of: [\'maptype\', \'overview\', \'scale\', \'toolbar\']');
    }
}

/***/ }),
/* 1 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = lngLat;
/* harmony export (immutable) */ __webpack_exports__["e"] = view2D;
/* harmony export (immutable) */ __webpack_exports__["c"] = pixel;
/* unused harmony export size */
/* unused harmony export icon */
/* harmony export (immutable) */ __webpack_exports__["b"] = marker;
/* harmony export (immutable) */ __webpack_exports__["d"] = tileLayer;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__validate__ = __webpack_require__(0);


function lngLat(obj, field) {
    var msg = 'passed ' + field + ' is not correct';
    if (Object(__WEBPACK_IMPORTED_MODULE_0__validate__["a" /* isArray */])(obj)) {
        if (obj.length !== 2) {
            throw new Error(msg);
        }
        return new AMap.LngLat(obj[0], obj[1]);
    }

    if (!Object(__WEBPACK_IMPORTED_MODULE_0__validate__["c" /* isNumber */])(obj.lng) && !Object(__WEBPACK_IMPORTED_MODULE_0__validate__["c" /* isNumber */])(obj.lat)) {
        throw new Error(msg);
    }
    return new AMap.LngLat(obj.lng, obj.lat);
}

function view2D(obj, field) {
    var msg = 'passed ' + field + ' is not correct';

    var opts = JSON.parse(JSON.stringify(obj));
    if (Object(__WEBPACK_IMPORTED_MODULE_0__validate__["b" /* isNull */])(opts.center)) {
        throw new Error(msg + ', center property is missed');
    }
    opts.center = lngLat(obj.center, field + '.center');
    return new AMap.View2D(opts);
}

function pixel(obj, field) {
    var msg = 'passed ' + field + ' is not correct';

    if (!Object(__WEBPACK_IMPORTED_MODULE_0__validate__["c" /* isNumber */])(obj.x)) {
        throw new Error(msg + ', x property is not a number');
    }
    if (!Object(__WEBPACK_IMPORTED_MODULE_0__validate__["c" /* isNumber */])(obj.y)) {
        throw new Error(msg + ', y property is not a number');
    }
    return new AMap.Pixel(obj.x, obj.y);
}

function size(obj, field) {
    var msg = 'passed ' + field + ' is not correct';

    if (!Object(__WEBPACK_IMPORTED_MODULE_0__validate__["c" /* isNumber */])(obj.width)) {
        throw new Error(msg + ', width property is not a number');
    }
    if (!Object(__WEBPACK_IMPORTED_MODULE_0__validate__["c" /* isNumber */])(obj.height)) {
        throw new Error(msg + ', height property is not a number');
    }
    return new AMap.Size(obj.width, obj.height);
}

function icon(obj, field) {
    var msg = 'passed ' + field + ' is not correct';
    if (Object(__WEBPACK_IMPORTED_MODULE_0__validate__["d" /* isString */])(obj)) {
        return AMap.Icon({
            image: obj
        });
    }
    var opts = JSON.parse(JSON.stringify(obj));
    if (opts.size) {
        opts.size = size(opts.size, field + '.size');
    }
    if (opts.imageOffset) {
        opts.imageOffset = pixel(opts.imageOffset, field + '.imageOffset');
    }
    if (opts.imageSize) {
        opts.imageSize = size(opts.imageSize, field + '.imageSize');
    }
    return new AMap.Icon(opts);
}

function marker(obj, field) {
    var opts = obj;
    if (opts.position) {
        opts.position = lngLat(opts.position, field + '.position');
    }
    if (opts.offset) {
        opts.offset = pixel(opts.offset, field + '.offset');
    }
    if (opts.icon) {
        opts.icon = icon(opts.icon, field + '.icon');
    }
    if (opts.shadow) {
        opts.shadow = icon(opts.shadow, field + '.shadow');
    }
    return new AMap.Marker(opts);
}

function tileLayer(obj, field) {
    var opts = JSON.parse(JSON.stringify(obj));
    return new AMap.TileLayer(opts);
}

/***/ }),
/* 2 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ngAMap", function() { return ngAMap; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_angular__ = __webpack_require__(3);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_angular___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_angular__);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__components_aMap__ = __webpack_require__(4);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__components_marker__ = __webpack_require__(7);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__components_plugin__ = __webpack_require__(8);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__provider_mapScript__ = __webpack_require__(9);







var moduleName = 'angular-amap';

__WEBPACK_IMPORTED_MODULE_0_angular___default.a.module(moduleName, []).provider('mapScriptService', __WEBPACK_IMPORTED_MODULE_4__provider_mapScript__["a" /* default */]).component('ngAmap', __WEBPACK_IMPORTED_MODULE_1__components_aMap__["a" /* default */]).component('marker', __WEBPACK_IMPORTED_MODULE_2__components_marker__["a" /* default */]).component('plugin', __WEBPACK_IMPORTED_MODULE_3__components_plugin__["a" /* default */]);

var ngAMap = moduleName;

/***/ }),
/* 3 */
/***/ (function(module, exports) {

module.exports = __WEBPACK_EXTERNAL_MODULE_3__;

/***/ }),
/* 4 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__style__ = __webpack_require__(5);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__helper_validate__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__helper_map__ = __webpack_require__(6);
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }





/* harmony default export */ __webpack_exports__["a"] = ({
    bindings: {
        offlineTxt: '<',
        mapOptions: '<',
        loaded: '&',
        click: '&'
    },
    transclude: true,
    template: '\n        <div ng-style="$ctrl.style.map" class="amap-instance"></div>\n        <div ng-style="$ctrl.style.offline" class="amap-offline">\n            <label ng-style="$ctrl.style.offlineLabel">{{ $ctrl.offlineTxt || \'NO_NETWORK\' }}</label>\n        </div>\n        <div ng-transclude style="display: none"></div>\n    ',
    controller: function () {
        controller.$inject = ['$scope', '$element', '$attrs', 'mapScriptService'];

        /* @ngInject */
        function controller($scope, $element, $attrs, mapScriptService) {
            _classCallCheck(this, controller);

            this.$scope = $scope;
            this.$element = $element;
            this.$attrs = $attrs;
            this.style = __WEBPACK_IMPORTED_MODULE_0__style__;
            this.mapScriptService = mapScriptService;
        }

        _createClass(controller, [{
            key: '$onInit',
            value: function $onInit() {
                var _this = this;

                Object(__WEBPACK_IMPORTED_MODULE_1__helper_validate__["e" /* nullCheck */])(this.mapOptions, 'mapOptions is required for <ng-amap>');
                Object(__WEBPACK_IMPORTED_MODULE_1__helper_validate__["e" /* nullCheck */])(this.mapOptions.center, 'mapOptions.center is required for <ng-amap>');

                this.mapReady = this.mapScriptService.load().then(function () {
                    return Object(__WEBPACK_IMPORTED_MODULE_2__helper_map__["a" /* create */])(_this.$element.children()[0], _this.mapOptions);
                }).then(function (map) {
                    _this.loaded({
                        map: map
                    });
                    _this.$scope.$apply();
                    //eslint-disable-next-line
                    return _this.map = map;
                }).then(function () {
                    if (!_this.$attrs.click) {
                        return;
                    }
                    var clickListener = _this.clickListener = function (e) {
                        _this.click({
                            e: e
                        });
                    };
                    AMap.event.addListener(_this.map, 'click', clickListener);
                });
            }
        }, {
            key: '$onChanges',
            value: function $onChanges(changes) {
                if (!this.map) {
                    return;
                }
                Object(__WEBPACK_IMPORTED_MODULE_2__helper_map__["b" /* refresh */])(this.map, changes.mapOptions.currentValue);
            }
        }, {
            key: '$onDestroy',
            value: function $onDestroy() {
                this.map.destroy();
                AMap.event.removeListener(this.map, 'click', this.clickListener);
            }
        }, {
            key: 'getMap',
            value: function getMap() {
                return this.map;
            }
        }]);

        return controller;
    }()
});

/***/ }),
/* 5 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "map", function() { return map; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "offline", function() { return offline; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "offlineLabel", function() { return offlineLabel; });
var map = {
    width: '100%',
    height: '100%',
    display: 'none'
};

var offline = {
    width: '100%',
    height: '100%',
    backgroundColor: '#E6E6E6',
    position: 'relative',
    display: 'none'
};

var offlineLabel = {
    fontSize: '30px',
    margin: 0,
    position: 'absolute',
    top: '50%',
    left: '50%',
    'margin-right': '-50%',
    transform: 'translate(-50%, -50%)'
};

/***/ }),
/* 6 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony export (immutable) */ __webpack_exports__["a"] = create;
/* harmony export (immutable) */ __webpack_exports__["b"] = refresh;
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__validate__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__transformer__ = __webpack_require__(1);



function create(element, mapOptions) {
    return new AMap.Map(element, transformOptions(mapOptions));
}

function refresh(map, mapOptions) {
    var opts = transformOptions(mapOptions);

    map.setCenter(opts.center);

    Object(__WEBPACK_IMPORTED_MODULE_0__validate__["a" /* isArray */])(opts.layers) && map.setLayers(opts.layers);
    Object(__WEBPACK_IMPORTED_MODULE_0__validate__["c" /* isNumber */])(opts.zoom) && map.setZoom(opts.zoom);
    Object(__WEBPACK_IMPORTED_MODULE_0__validate__["c" /* isNumber */])(opts.labelzIndex) && map.setlabelzIndex(opts.labelzIndex);
    Object(__WEBPACK_IMPORTED_MODULE_0__validate__["d" /* isString */])(opts.lang) && map.setLang(opts.lang);
    Object(__WEBPACK_IMPORTED_MODULE_0__validate__["d" /* isString */])(opts.cursor) && map.setDefaultCursor(opts.cursor);
    !Object(__WEBPACK_IMPORTED_MODULE_0__validate__["b" /* isNull */])(opts.defaultLayer) && map.setDefaultLayer(opts.defaultLayer);
    !Object(__WEBPACK_IMPORTED_MODULE_0__validate__["b" /* isNull */])(opts.city) && map.setCity(opts.city);
}

function transformOptions(options) {
    var opts = JSON.parse(JSON.stringify(options));
    opts.center = Object(__WEBPACK_IMPORTED_MODULE_1__transformer__["a" /* lngLat */])(opts.center, 'mapOptions.center');
    if (!Object(__WEBPACK_IMPORTED_MODULE_0__validate__["b" /* isNull */])(opts.view)) {
        opts.view = Object(__WEBPACK_IMPORTED_MODULE_1__transformer__["e" /* view2D */])(opts.view, 'mapOptions.view');
    }
    if (!Object(__WEBPACK_IMPORTED_MODULE_0__validate__["b" /* isNull */])(opts.defaultLayer)) {
        opts.defaultLayer = Object(__WEBPACK_IMPORTED_MODULE_1__transformer__["d" /* tileLayer */])(opts.defaultLayer, 'mapOptions.defaultLayer');
    }
    return opts;
}

/***/ }),
/* 7 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__helper_validate__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__helper_transformer__ = __webpack_require__(1);
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }




/* harmony default export */ __webpack_exports__["a"] = ({
    bindings: {
        options: '<',
        loaded: '&',
        click: '&'
    },
    require: {
        mapCtrl: '^ngAmap'
    },
    template: '',
    controller: function () {
        controller.$inject = ['$scope', '$attrs'];

        /* @ngInject */
        function controller($scope, $attrs) {
            _classCallCheck(this, controller);

            this.$scope = $scope;
            this.$attrs = $attrs;
        }

        _createClass(controller, [{
            key: '$onInit',
            value: function $onInit() {
                var _this = this;

                Object(__WEBPACK_IMPORTED_MODULE_0__helper_validate__["e" /* nullCheck */])(this.options, 'options is required for <marker>');
                Object(__WEBPACK_IMPORTED_MODULE_0__helper_validate__["e" /* nullCheck */])(this.options.position, 'options.position is required for <marker>');

                this.mapCtrl.mapReady.then(function () {
                    var marker = _this.marker = Object(__WEBPACK_IMPORTED_MODULE_1__helper_transformer__["b" /* marker */])(_this.options, 'options');
                    marker.setMap(_this.mapCtrl.getMap());
                    _this.loaded({
                        marker: marker
                    });
                    _this.$scope.$apply();
                    return marker;
                }).then(function (marker) {
                    if (!_this.$attrs.click) {
                        return;
                    }
                    _this.clickHandler = function (e) {
                        _this.click({
                            e: e,
                            marker: marker,
                            map: _this.mapCtrl.getMap()
                        });
                        _this.$scope.$apply();
                    };
                    AMap.event.addListener(marker, 'click', _this.clickHandler);
                });
            }
        }, {
            key: '$onDestroy',
            value: function $onDestroy() {
                AMap.event.removeListener(this.marker, 'click', this.clickHandler);
                this.marker.setMap(null);
            }
        }]);

        return controller;
    }()
});

/***/ }),
/* 8 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__helper_validate__ = __webpack_require__(0);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__helper_transformer__ = __webpack_require__(1);
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }




/* harmony default export */ __webpack_exports__["a"] = ({
    bindings: {
        name: '@',
        options: '<',
        loaded: '&'
    },
    require: {
        mapCtrl: '^ngAmap'
    },
    template: '',
    controller: function () {
        controller.$inject = ['$scope'];

        /* @ngInject */
        function controller($scope) {
            _classCallCheck(this, controller);

            this.$scope = $scope;
        }

        _createClass(controller, [{
            key: '$onInit',
            value: function $onInit() {
                var _this = this;

                Object(__WEBPACK_IMPORTED_MODULE_0__helper_validate__["b" /* isNull */])(this.name);

                this.mapCtrl.mapReady.then(function () {
                    return createControl(_this.mapCtrl.getMap(), _this.name, transformOptions(_this.mapCtrl.getMap(), _this.options || {}));
                }).then(function (control) {
                    _this.control = control;
                    _this.loaded({
                        plugin: control
                    });
                    _this.$scope.$apply();
                    if (control) {
                        _this.mapCtrl.getMap().addControl(control);
                    }
                });
            }
        }, {
            key: '$onDestroy',
            value: function $onDestroy() {
                this.mapCtrl.getMap().removeControl(this.control);
            }
        }]);

        return controller;
    }()
});

function createControl(map, name, options) {
    return new Promise(function (resolve, reject) {
        return AMap.plugin(['AMap.' + name], function () {
            if (name === 'MarkerClusterer') {
                if (!Object(__WEBPACK_IMPORTED_MODULE_0__helper_validate__["a" /* isArray */])(options) || !options.length) {
                    return reject(new Error('[options] for MarkerClusterer should not be empty, it must be an Array of marker'));
                }
                return resolve(new AMap[name](map, options.map(function (o) {
                    return Object(__WEBPACK_IMPORTED_MODULE_1__helper_transformer__["b" /* marker */])(o, 'option for MarkerClusterer');
                })));
            }
            resolve(new AMap[name](options));
        });
    });
}

function transformOptions(map, options) {
    var opts = JSON.parse(JSON.stringify(options));
    if (opts.offset) {
        opts.offset = Object(__WEBPACK_IMPORTED_MODULE_1__helper_transformer__["c" /* pixel */])(opts.offset, 'options.offset');
    }
    if (opts.locationMarker) {
        opts.locationMarker = Object(__WEBPACK_IMPORTED_MODULE_1__helper_transformer__["b" /* marker */])(opts.locationMarker, 'options.locationMarker');
        opts.locationMarker.setMap(map);
    }
    return opts;
}

/***/ }),
/* 9 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__helper_validate__ = __webpack_require__(0);


/* harmony default export */ __webpack_exports__["a"] = (function () {
    var ak = null,
        MAP_URL = void 0;

    this.setKey = function (val) {
        ak = val;
        MAP_URL = '//webapi.amap.com/maps?v=1.4.2&key=' + val + '&callback=amapinit';
    };

    this.$get = ['$rootScope', function ($rootScope) {
        'ngInject';

        return {
            load: function load() {

                Object(__WEBPACK_IMPORTED_MODULE_0__helper_validate__["e" /* nullCheck */])(ak, 'ak should be set before use. Read: https://leftstick.github.io/angular-amap/#!/quickstart');

                var loadAMapPromise = $rootScope.loadAMapPromise;
                if (loadAMapPromise) {
                    return loadAMapPromise.then(displayMap);
                }

                //eslint-disable-next-line
                return $rootScope.loadAMapPromise = new Promise(function (resolve, reject) {
                    window.amapinit = resolve;
                    appendScriptTag(MAP_URL);
                }).then(displayMap);
            }
        };
    }];
});

function appendScriptTag(url) {
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = url;
    script.onerror = function () {

        Array.prototype.slice.call(document.querySelectorAll('ng-amap .amap-offline')).forEach(function (node) {
            node.style.display = 'block';
        });
        document.body.removeChild(script);

        setTimeout(function () {
            appendScriptTag(url);
        }, 30000);
    };
    document.body.appendChild(script);
}

function displayMap() {
    return Array.prototype.slice.call(document.querySelectorAll('ng-amap')).forEach(function (node) {
        node.querySelector('.amap-offline') && node.removeChild(node.querySelector('.amap-offline'));
        node.querySelector('.amap-instance').style.display = 'block';
    });
}

/***/ })
/******/ ]);
});