UNPKG

ngx-amap

Version:

[![npm](https://img.shields.io/npm/v/ngx-amap.svg)][npm-badge-url] [![npm](https://img.shields.io/npm/dm/ngx-amap.svg)][npm-badge-url] [![Build Status](https://travis-ci.org/xieziyu/ngx-amap.svg?branch=master)][ci-url]

205 lines 16 kB
/** * @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 {?} */ const TAG = 'AMapLoader'; export class AMapLoaderService { /** * @param {?=} config * @param {?=} logger */ constructor(config = {}, logger) { this.config = config; this.logger = logger; this.defaultProtocol = 'https'; this.defaultVersion = '1.4.15'; this.defaultUIVersion = '1.0.11'; this.config = config || {}; } /** * @return {?} */ load() { if (this.loading$) { return this.loading$.asObservable(); } this.logger.d(TAG, 'loading AMap API ...'); this.loading$ = new ReplaySubject(); /** @type {?} */ const callbackName = '_NgxAmapAPILoader'; /** @type {?} */ const script = document.createElement('script'); script.type = 'text/javascript'; script.async = true; script.defer = true; script.src = this.getSrcFromConfig(callbackName); script.onerror = (/** * @param {?} err * @return {?} */ (err) => { this.logger.e('failed to load AMap API.'); this.loading$.error(err); }); window[callbackName] = (/** * @return {?} */ () => { this.logger.d(TAG, 'loading AMap API COMPLETE'); this.loading$.next(); this.loading$.complete(); }); document.body.appendChild(script); return this.loading$.asObservable(); } /** * @return {?} */ loadUI() { if (this.uiLoading$) { return this.uiLoading$.asObservable(); } this.logger.d(TAG, 'loading AMap UI ...'); this.uiLoading$ = new ReplaySubject(); /** @type {?} */ const uiScript = document.createElement('script'); uiScript.type = 'text/javascript'; uiScript.async = true; uiScript.defer = true; uiScript.src = this.getUISrcFromConfig(); uiScript.onerror = (/** * @param {?} err * @return {?} */ (err) => { this.logger.e('failed to load AMap API.'); }); uiScript.onload = (/** * @return {?} */ () => { // 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 {?} */ getSrcFromConfig(callbackName) { /** @type {?} */ const urlBase = `${this.config.protocol || this.defaultProtocol}://webapi.amap.com/maps`; /** @type {?} */ const queryParams = { v: this.config.apiVersion || this.defaultVersion, callback: callbackName, key: this.config.apiKey, }; /** @type {?} */ const params = Object.keys(queryParams) .filter((/** * @param {?} k * @return {?} */ (k) => queryParams[k] != null)) .filter((/** * @param {?} k * @return {?} */ (k) => { // remove empty arrays return (!Array.isArray(queryParams[k]) || (Array.isArray(queryParams[k]) && queryParams[k].length > 0)); })) .map((/** * @param {?} k * @return {?} */ (k) => { // join arrays as comma seperated strings /** @type {?} */ const i = queryParams[k]; if (Array.isArray(i)) { return { key: k, value: i.join(',') }; } return { key: k, value: queryParams[k] }; })) .map((/** * @param {?} entry * @return {?} */ (entry) => `${entry.key}=${entry.value}`)) .join('&'); return `${urlBase}?${params}`; } /** * @private * @return {?} */ getUISrcFromConfig() { // tslint:disable-next-line: max-line-length /** @type {?} */ const 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 = () => [ { type: undefined, decorators: [{ type: Inject, args: [NGX_AMAP_CONFIG,] }] }, { type: LoggerService } ]; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1hcC1sb2FkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hbWFwLyIsInNvdXJjZXMiOlsic2hhcmVkL2FtYXAtbG9hZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFpQixlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRSxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDOztNQUUzQyxHQUFHLEdBQUcsWUFBWTtBQUd4QixNQUFNLE9BQU8saUJBQWlCOzs7OztJQU81QixZQUNtQyxTQUF3QixFQUFFLEVBQ25ELE1BQXFCO1FBREksV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFDbkQsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQVJ2QixvQkFBZSxHQUFHLE9BQU8sQ0FBQztRQUMxQixtQkFBYyxHQUFHLFFBQVEsQ0FBQztRQUMxQixxQkFBZ0IsR0FBRyxRQUFRLENBQUM7UUFRbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7Ozs7SUFFRCxJQUFJO1FBQ0YsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQzs7Y0FDOUIsWUFBWSxHQUFHLG1CQUFtQjs7Y0FDbEMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxJQUFJLEdBQUcs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ckMsSUFBSSxDQUFDLGVBQWUsNkNBQTZDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztZQUN0RixJQUFJLENBQUMsZ0JBQWdCLEVBQUU7UUFDekIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs7O1lBckdGLFVBQVU7Ozs7NENBU04sTUFBTSxTQUFDLGVBQWU7WUFmbEIsYUFBYTs7Ozs7OztJQVFwQiw0Q0FBa0M7Ozs7O0lBQ2xDLDJDQUFrQzs7Ozs7SUFDbEMsNkNBQW9DOzs7OztJQUNwQyxxQ0FBc0M7Ozs7O0lBQ3RDLHVDQUF3Qzs7Ozs7SUFHdEMsbUNBQTJEOzs7OztJQUMzRCxtQ0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3hBbWFwQ29uZmlnLCBOR1hfQU1BUF9DT05GSUcgfSBmcm9tICcuL25neC1hbWFwLWNvbmZpZyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmNvbnN0IFRBRyA9ICdBTWFwTG9hZGVyJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFNYXBMb2FkZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBkZWZhdWx0UHJvdG9jb2wgPSAnaHR0cHMnO1xuICBwcml2YXRlIGRlZmF1bHRWZXJzaW9uID0gJzEuNC4xNSc7XG4gIHByaXZhdGUgZGVmYXVsdFVJVmVyc2lvbiA9ICcxLjAuMTEnO1xuICBwcml2YXRlIGxvYWRpbmckOiBSZXBsYXlTdWJqZWN0PHZvaWQ+O1xuICBwcml2YXRlIHVpTG9hZGluZyQ6IFJlcGxheVN1YmplY3Q8dm9pZD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChOR1hfQU1BUF9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBOZ3hBbWFwQ29uZmlnID0ge30sXG4gICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICB9XG5cbiAgbG9hZCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5sb2FkaW5nJCkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGluZyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHRoaXMubG9nZ2VyLmQoVEFHLCAnbG9hZGluZyBBTWFwIEFQSSAuLi4nKTtcbiAgICB0aGlzLmxvYWRpbmckID0gbmV3IFJlcGxheVN1YmplY3QoKTtcbiAgICBjb25zdCBjYWxsYmFja05hbWUgPSAnX05neEFtYXBBUElMb2FkZXInO1xuICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICBzY3JpcHQuZGVmZXIgPSB0cnVlO1xuICAgIHNjcmlwdC5zcmMgPSB0aGlzLmdldFNyY0Zyb21Db25maWcoY2FsbGJhY2tOYW1lKTtcbiAgICBzY3JpcHQub25lcnJvciA9IChlcnI6IEV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmxvZ2dlci5lKCdmYWlsZWQgdG8gbG9hZCBBTWFwIEFQSS4nKTtcbiAgICAgIHRoaXMubG9hZGluZyQuZXJyb3IoZXJyKTtcbiAgICB9O1xuICAgIHdpbmRvd1tjYWxsYmFja05hbWVdID0gKCkgPT4ge1xuICAgICAgdGhpcy5sb2dnZXIuZChUQUcsICdsb2FkaW5nIEFNYXAgQVBJIENPTVBMRVRFJyk7XG4gICAgICB0aGlzLmxvYWRpbmckLm5leHQoKTtcbiAgICAgIHRoaXMubG9hZGluZyQuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGxvYWRVSSgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy51aUxvYWRpbmckKSB7XG4gICAgICByZXR1cm4gdGhpcy51aUxvYWRpbmckLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICB0aGlzLmxvZ2dlci5kKFRBRywgJ2xvYWRpbmcgQU1hcCBVSSAuLi4nKTtcbiAgICB0aGlzLnVpTG9hZGluZyQgPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xuICAgIGNvbnN0IHVpU2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgdWlTY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgIHVpU2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICB1aVNjcmlwdC5kZWZlciA9IHRydWU7XG4gICAgdWlTY3JpcHQuc3JjID0gdGhpcy5nZXRVSVNyY0Zyb21Db25maWcoKTtcbiAgICB1aVNjcmlwdC5vbmVycm9yID0gKGVycjogRXZlbnQpID0+IHtcbiAgICAgIHRoaXMubG9nZ2VyLmUoJ2ZhaWxlZCB0byBsb2FkIEFNYXAgQVBJLicpO1xuICAgIH07XG4gICAgdWlTY3JpcHQub25sb2FkID0gKCkgPT4ge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1zdHJpbmctbGl0ZXJhbFxuICAgICAgd2luZG93Wydpbml0QU1hcFVJJ10oKTtcbiAgICAgIHRoaXMubG9nZ2VyLmQoVEFHLCAnbG9hZGluZyBBTWFwIFVJIENPTVBMRVRFJyk7XG4gICAgICB0aGlzLnVpTG9hZGluZyQubmV4dCgpO1xuICAgICAgdGhpcy51aUxvYWRpbmckLmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHVpU2NyaXB0KTtcbiAgICByZXR1cm4gdGhpcy51aUxvYWRpbmckLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTcmNGcm9tQ29uZmlnKGNhbGxiYWNrTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdXJsQmFzZSA9IGAke3RoaXMuY29uZmlnLnByb3RvY29sIHx8IHRoaXMuZGVmYXVsdFByb3RvY29sfTovL3dlYmFwaS5hbWFwLmNvbS9tYXBzYDtcbiAgICBjb25zdCBxdWVyeVBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+IH0gPSB7XG4gICAgICB2OiB0aGlzLmNvbmZpZy5hcGlWZXJzaW9uIHx8IHRoaXMuZGVmYXVsdFZlcnNpb24sXG4gICAgICBjYWxsYmFjazogY2FsbGJhY2tOYW1lLFxuICAgICAga2V5OiB0aGlzLmNvbmZpZy5hcGlLZXksXG4gICAgfTtcbiAgICBjb25zdCBwYXJhbXMgPSBPYmplY3Qua2V5cyhxdWVyeVBhcmFtcylcbiAgICAgIC5maWx0ZXIoKGs6IHN0cmluZykgPT4gcXVlcnlQYXJhbXNba10gIT0gbnVsbClcbiAgICAgIC5maWx0ZXIoKGs6IHN0cmluZykgPT4ge1xuICAgICAgICAvLyByZW1vdmUgZW1wdHkgYXJyYXlzXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgIUFycmF5LmlzQXJyYXkocXVlcnlQYXJhbXNba10pIHx8XG4gICAgICAgICAgKEFycmF5LmlzQXJyYXkocXVlcnlQYXJhbXNba10pICYmIHF1ZXJ5UGFyYW1zW2tdLmxlbmd0aCA+IDApXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLm1hcCgoazogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vIGpvaW4gYXJyYXlzIGFzIGNvbW1hIHNlcGVyYXRlZCBzdHJpbmdzXG4gICAgICAgIGNvbnN0IGkgPSBxdWVyeVBhcmFtc1trXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaSkpIHtcbiAgICAgICAgICByZXR1cm4geyBrZXk6IGssIHZhbHVlOiBpLmpvaW4oJywnKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGtleTogaywgdmFsdWU6IHF1ZXJ5UGFyYW1zW2tdIH07XG4gICAgICB9KVxuICAgICAgLm1hcCgoZW50cnk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSkgPT4gYCR7ZW50cnkua2V5fT0ke2VudHJ5LnZhbHVlfWApXG4gICAgICAuam9pbignJicpO1xuXG4gICAgcmV0dXJuIGAke3VybEJhc2V9PyR7cGFyYW1zfWA7XG4gIH1cblxuICBwcml2YXRlIGdldFVJU3JjRnJvbUNvbmZpZygpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgIGNvbnN0IHVybEJhc2UgPSBgJHt0aGlzLmNvbmZpZy5wcm90b2NvbCB8fFxuICAgICAgdGhpcy5kZWZhdWx0UHJvdG9jb2x9Oi8vd2ViYXBpLmFtYXAuY29tL3VpLzEuMC9tYWluLWFzeW5jLmpzP3Y9JHt0aGlzLmNvbmZpZy51aVZlcnNpb24gfHxcbiAgICAgIHRoaXMuZGVmYXVsdFVJVmVyc2lvbn1gO1xuICAgIHJldHVybiB1cmxCYXNlO1xuICB9XG59XG4iXX0=