ngx-amap
Version:
[][npm-badge-url] [][npm-badge-url] [][ci-url]
221 lines • 16.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: shared/amap-loader.service.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Inject, Injectable } from '@angular/core';
import { LoggerService } from './logger/logger.service';
import { NGX_AMAP_CONFIG } from './ngx-amap-config';
import { ReplaySubject } from 'rxjs';
/** @type {?} */
var TAG = 'AMapLoader';
var AMapLoaderService = /** @class */ (function () {
function AMapLoaderService(config, logger) {
if (config === void 0) { config = {}; }
this.config = config;
this.logger = logger;
this.defaultProtocol = 'https';
this.defaultVersion = '1.4.15';
this.defaultUIVersion = '1.0.11';
this.config = config || {};
}
/**
* @return {?}
*/
AMapLoaderService.prototype.load = /**
* @return {?}
*/
function () {
var _this = this;
if (this.loading$) {
return this.loading$.asObservable();
}
this.logger.d(TAG, 'loading AMap API ...');
this.loading$ = new ReplaySubject();
/** @type {?} */
var callbackName = '_NgxAmapAPILoader';
/** @type {?} */
var script = document.createElement('script');
script.type = 'text/javascript';
script.async = true;
script.defer = true;
script.src = this.getSrcFromConfig(callbackName);
script.onerror = (/**
* @param {?} err
* @return {?}
*/
function (err) {
_this.logger.e('failed to load AMap API.');
_this.loading$.error(err);
});
window[callbackName] = (/**
* @return {?}
*/
function () {
_this.logger.d(TAG, 'loading AMap API COMPLETE');
_this.loading$.next();
_this.loading$.complete();
});
document.body.appendChild(script);
return this.loading$.asObservable();
};
/**
* @return {?}
*/
AMapLoaderService.prototype.loadUI = /**
* @return {?}
*/
function () {
var _this = this;
if (this.uiLoading$) {
return this.uiLoading$.asObservable();
}
this.logger.d(TAG, 'loading AMap UI ...');
this.uiLoading$ = new ReplaySubject();
/** @type {?} */
var uiScript = document.createElement('script');
uiScript.type = 'text/javascript';
uiScript.async = true;
uiScript.defer = true;
uiScript.src = this.getUISrcFromConfig();
uiScript.onerror = (/**
* @param {?} err
* @return {?}
*/
function (err) {
_this.logger.e('failed to load AMap API.');
});
uiScript.onload = (/**
* @return {?}
*/
function () {
// tslint:disable-next-line: no-string-literal
window['initAMapUI']();
_this.logger.d(TAG, 'loading AMap UI COMPLETE');
_this.uiLoading$.next();
_this.uiLoading$.complete();
});
document.body.appendChild(uiScript);
return this.uiLoading$.asObservable();
};
/**
* @private
* @param {?} callbackName
* @return {?}
*/
AMapLoaderService.prototype.getSrcFromConfig = /**
* @private
* @param {?} callbackName
* @return {?}
*/
function (callbackName) {
/** @type {?} */
var urlBase = (this.config.protocol || this.defaultProtocol) + "://webapi.amap.com/maps";
/** @type {?} */
var queryParams = {
v: this.config.apiVersion || this.defaultVersion,
callback: callbackName,
key: this.config.apiKey,
};
/** @type {?} */
var params = Object.keys(queryParams)
.filter((/**
* @param {?} k
* @return {?}
*/
function (k) { return queryParams[k] != null; }))
.filter((/**
* @param {?} k
* @return {?}
*/
function (k) {
// remove empty arrays
return (!Array.isArray(queryParams[k]) ||
(Array.isArray(queryParams[k]) && queryParams[k].length > 0));
}))
.map((/**
* @param {?} k
* @return {?}
*/
function (k) {
// join arrays as comma seperated strings
/** @type {?} */
var i = queryParams[k];
if (Array.isArray(i)) {
return { key: k, value: i.join(',') };
}
return { key: k, value: queryParams[k] };
}))
.map((/**
* @param {?} entry
* @return {?}
*/
function (entry) { return entry.key + "=" + entry.value; }))
.join('&');
return urlBase + "?" + params;
};
/**
* @private
* @return {?}
*/
AMapLoaderService.prototype.getUISrcFromConfig = /**
* @private
* @return {?}
*/
function () {
// tslint:disable-next-line: max-line-length
/** @type {?} */
var urlBase = (this.config.protocol ||
this.defaultProtocol) + "://webapi.amap.com/ui/1.0/main-async.js?v=" + (this.config.uiVersion ||
this.defaultUIVersion);
return urlBase;
};
AMapLoaderService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
AMapLoaderService.ctorParameters = function () { return [
{ type: undefined, decorators: [{ type: Inject, args: [NGX_AMAP_CONFIG,] }] },
{ type: LoggerService }
]; };
return AMapLoaderService;
}());
export { AMapLoaderService };
if (false) {
/**
* @type {?}
* @private
*/
AMapLoaderService.prototype.defaultProtocol;
/**
* @type {?}
* @private
*/
AMapLoaderService.prototype.defaultVersion;
/**
* @type {?}
* @private
*/
AMapLoaderService.prototype.defaultUIVersion;
/**
* @type {?}
* @private
*/
AMapLoaderService.prototype.loading$;
/**
* @type {?}
* @private
*/
AMapLoaderService.prototype.uiLoading$;
/**
* @type {?}
* @private
*/
AMapLoaderService.prototype.config;
/**
* @type {?}
* @private
*/
AMapLoaderService.prototype.logger;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1hcC1sb2FkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hbWFwLyIsInNvdXJjZXMiOlsic2hhcmVkL2FtYXAtbG9hZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFpQixlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRSxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDOztJQUUzQyxHQUFHLEdBQUcsWUFBWTtBQUV4QjtJQVFFLDJCQUNtQyxNQUEwQixFQUNuRCxNQUFxQjtRQURJLHVCQUFBLEVBQUEsV0FBMEI7UUFBMUIsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFDbkQsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQVJ2QixvQkFBZSxHQUFHLE9BQU8sQ0FBQztRQUMxQixtQkFBYyxHQUFHLFFBQVEsQ0FBQztRQUMxQixxQkFBZ0IsR0FBRyxRQUFRLENBQUM7UUFRbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7Ozs7SUFFRCxnQ0FBSTs7O0lBQUo7UUFBQSxpQkF1QkM7UUF0QkMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQzs7WUFDOUIsWUFBWSxHQUFHLG1CQUFtQjs7WUFDbEMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO1FBQy9DLE1B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Q0FBQyxlQUFlLG9EQUE2QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVM7WUFDdEYsSUFBSSxDQUFDLGdCQUFnQixDQUFFO1FBQ3pCLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7O2dCQXJHRixVQUFVOzs7O2dEQVNOLE1BQU0sU0FBQyxlQUFlO2dCQWZsQixhQUFhOztJQTRHdEIsd0JBQUM7Q0FBQSxBQXRHRCxJQXNHQztTQXJHWSxpQkFBaUI7Ozs7OztJQUM1Qiw0Q0FBa0M7Ozs7O0lBQ2xDLDJDQUFrQzs7Ozs7SUFDbEMsNkNBQW9DOzs7OztJQUNwQyxxQ0FBc0M7Ozs7O0lBQ3RDLHVDQUF3Qzs7Ozs7SUFHdEMsbUNBQTJEOzs7OztJQUMzRCxtQ0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3hBbWFwQ29uZmlnLCBOR1hfQU1BUF9DT05GSUcgfSBmcm9tICcuL25neC1hbWFwLWNvbmZpZyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmNvbnN0IFRBRyA9ICdBTWFwTG9hZGVyJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFNYXBMb2FkZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBkZWZhdWx0UHJvdG9jb2wgPSAnaHR0cHMnO1xuICBwcml2YXRlIGRlZmF1bHRWZXJzaW9uID0gJzEuNC4xNSc7XG4gIHByaXZhdGUgZGVmYXVsdFVJVmVyc2lvbiA9ICcxLjAuMTEnO1xuICBwcml2YXRlIGxvYWRpbmckOiBSZXBsYXlTdWJqZWN0PHZvaWQ+O1xuICBwcml2YXRlIHVpTG9hZGluZyQ6IFJlcGxheVN1YmplY3Q8dm9pZD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChOR1hfQU1BUF9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBOZ3hBbWFwQ29uZmlnID0ge30sXG4gICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICB9XG5cbiAgbG9hZCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5sb2FkaW5nJCkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGluZyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHRoaXMubG9nZ2VyLmQoVEFHLCAnbG9hZGluZyBBTWFwIEFQSSAuLi4nKTtcbiAgICB0aGlzLmxvYWRpbmckID0gbmV3IFJlcGxheVN1YmplY3QoKTtcbiAgICBjb25zdCBjYWxsYmFja05hbWUgPSAnX05neEFtYXBBUElMb2FkZXInO1xuICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICBzY3JpcHQuZGVmZXIgPSB0cnVlO1xuICAgIHNjcmlwdC5zcmMgPSB0aGlzLmdldFNyY0Zyb21Db25maWcoY2FsbGJhY2tOYW1lKTtcbiAgICBzY3JpcHQub25lcnJvciA9IChlcnI6IEV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmxvZ2dlci5lKCdmYWlsZWQgdG8gbG9hZCBBTWFwIEFQSS4nKTtcbiAgICAgIHRoaXMubG9hZGluZyQuZXJyb3IoZXJyKTtcbiAgICB9O1xuICAgIHdpbmRvd1tjYWxsYmFja05hbWVdID0gKCkgPT4ge1xuICAgICAgdGhpcy5sb2dnZXIuZChUQUcsICdsb2FkaW5nIEFNYXAgQVBJIENPTVBMRVRFJyk7XG4gICAgICB0aGlzLmxvYWRpbmckLm5leHQoKTtcbiAgICAgIHRoaXMubG9hZGluZyQuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGxvYWRVSSgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy51aUxvYWRpbmckKSB7XG4gICAgICByZXR1cm4gdGhpcy51aUxvYWRpbmckLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICB0aGlzLmxvZ2dlci5kKFRBRywgJ2xvYWRpbmcgQU1hcCBVSSAuLi4nKTtcbiAgICB0aGlzLnVpTG9hZGluZyQgPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xuICAgIGNvbnN0IHVpU2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgdWlTY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgIHVpU2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICB1aVNjcmlwdC5kZWZlciA9IHRydWU7XG4gICAgdWlTY3JpcHQuc3JjID0gdGhpcy5nZXRVSVNyY0Zyb21Db25maWcoKTtcbiAgICB1aVNjcmlwdC5vbmVycm9yID0gKGVycjogRXZlbnQpID0+IHtcbiAgICAgIHRoaXMubG9nZ2VyLmUoJ2ZhaWxlZCB0byBsb2FkIEFNYXAgQVBJLicpO1xuICAgIH07XG4gICAgdWlTY3JpcHQub25sb2FkID0gKCkgPT4ge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1zdHJpbmctbGl0ZXJhbFxuICAgICAgd2luZG93Wydpbml0QU1hcFVJJ10oKTtcbiAgICAgIHRoaXMubG9nZ2VyLmQoVEFHLCAnbG9hZGluZyBBTWFwIFVJIENPTVBMRVRFJyk7XG4gICAgICB0aGlzLnVpTG9hZGluZyQubmV4dCgpO1xuICAgICAgdGhpcy51aUxvYWRpbmckLmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHVpU2NyaXB0KTtcbiAgICByZXR1cm4gdGhpcy51aUxvYWRpbmckLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTcmNGcm9tQ29uZmlnKGNhbGxiYWNrTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdXJsQmFzZSA9IGAke3RoaXMuY29uZmlnLnByb3RvY29sIHx8IHRoaXMuZGVmYXVsdFByb3RvY29sfTovL3dlYmFwaS5hbWFwLmNvbS9tYXBzYDtcbiAgICBjb25zdCBxdWVyeVBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+IH0gPSB7XG4gICAgICB2OiB0aGlzLmNvbmZpZy5hcGlWZXJzaW9uIHx8IHRoaXMuZGVmYXVsdFZlcnNpb24sXG4gICAgICBjYWxsYmFjazogY2FsbGJhY2tOYW1lLFxuICAgICAga2V5OiB0aGlzLmNvbmZpZy5hcGlLZXksXG4gICAgfTtcbiAgICBjb25zdCBwYXJhbXMgPSBPYmplY3Qua2V5cyhxdWVyeVBhcmFtcylcbiAgICAgIC5maWx0ZXIoKGs6IHN0cmluZykgPT4gcXVlcnlQYXJhbXNba10gIT0gbnVsbClcbiAgICAgIC5maWx0ZXIoKGs6IHN0cmluZykgPT4ge1xuICAgICAgICAvLyByZW1vdmUgZW1wdHkgYXJyYXlzXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgIUFycmF5LmlzQXJyYXkocXVlcnlQYXJhbXNba10pIHx8XG4gICAgICAgICAgKEFycmF5LmlzQXJyYXkocXVlcnlQYXJhbXNba10pICYmIHF1ZXJ5UGFyYW1zW2tdLmxlbmd0aCA+IDApXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLm1hcCgoazogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vIGpvaW4gYXJyYXlzIGFzIGNvbW1hIHNlcGVyYXRlZCBzdHJpbmdzXG4gICAgICAgIGNvbnN0IGkgPSBxdWVyeVBhcmFtc1trXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaSkpIHtcbiAgICAgICAgICByZXR1cm4geyBrZXk6IGssIHZhbHVlOiBpLmpvaW4oJywnKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGtleTogaywgdmFsdWU6IHF1ZXJ5UGFyYW1zW2tdIH07XG4gICAgICB9KVxuICAgICAgLm1hcCgoZW50cnk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSkgPT4gYCR7ZW50cnkua2V5fT0ke2VudHJ5LnZhbHVlfWApXG4gICAgICAuam9pbignJicpO1xuXG4gICAgcmV0dXJuIGAke3VybEJhc2V9PyR7cGFyYW1zfWA7XG4gIH1cblxuICBwcml2YXRlIGdldFVJU3JjRnJvbUNvbmZpZygpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgIGNvbnN0IHVybEJhc2UgPSBgJHt0aGlzLmNvbmZpZy5wcm90b2NvbCB8fFxuICAgICAgdGhpcy5kZWZhdWx0UHJvdG9jb2x9Oi8vd2ViYXBpLmFtYXAuY29tL3VpLzEuMC9tYWluLWFzeW5jLmpzP3Y9JHt0aGlzLmNvbmZpZy51aVZlcnNpb24gfHxcbiAgICAgIHRoaXMuZGVmYXVsdFVJVmVyc2lvbn1gO1xuICAgIHJldHVybiB1cmxCYXNlO1xuICB9XG59XG4iXX0=