Commit 6cb357d4 authored by Fawad Mirzad's avatar Fawad Mirzad
Browse files

Improve code quality

parent 62595c24
Loading
Loading
Loading
Loading

src/.babelrc

deleted100644 → 0
+0 −8
Original line number Diff line number Diff line
{
  "presets": ["@babel/preset-env"],
  "plugins": [
    "@babel/plugin-proposal-object-rest-spread",
    "transform-inline-environment-variables",
    "minify-dead-code-elimination"
  ]
}
+3 −3
Original line number Diff line number Diff line
import lazy from './utils/lazyValue'
import { loadGmapApi } from './manager'
import { loadGMapApi } from './manager'
import { createApp } from 'vue'
import Marker from './components/marker'
import Polyline from './components/polyline'
@@ -18,7 +18,7 @@ let GmapApi = null

// export everything
export {
  loadGmapApi,
  loadGMapApi,
  Marker,
  Polyline,
  Polygon,
@@ -100,7 +100,7 @@ function makeGmapApiPromiseLazy(options) {
        return new Promise((resolve, reject) => {
          try {
            window['vueGoogleMapsInit'] = resolve
            loadGmapApi(options.load, options.loadCn)
            loadGMapApi(options.load, options.loadCn)
          } catch (err) {
            reject(err)
          }
+8 −66
Original line number Diff line number Diff line
import {Env} from "@/utils/env";
import {createMapScript} from "@/utils/create-map-script";

let isApiSetUp = false
export function loadGMapApi (options) {

/**
 * @param apiKey    API Key, or object with the URL parameters. For example
 *                  to use Google Maps Premium API, pass
 *                    `{ client: <YOUR-CLIENT-ID> }`.
 *                  You may pass the libraries and/or version (as `v`) parameter into
 *                  this parameter and skip the next two parameters
 * @param version   Google Maps version
 * @param libraries Libraries to load (@see
 *                  https://developers.google.com/maps/documentation/javascript/libraries)
 * @param loadCn    Boolean. If set to true, the map will be loaded from google maps China
 *                  (@see https://developers.google.com/maps/documentation/javascript/basics#GoogleMapsChina)
 *
 * Example:
 * ```
 *      import {load} from 'vue-google-maps'
 *
 *      load(<YOUR-API-KEY>)
 *
 *      load({
 *              key: <YOUR-API-KEY>,
 *      })
 *
 *      load({
 *              client: <YOUR-CLIENT-ID>,
 *              channel: <YOUR CHANNEL>
 *      })
 * ```
 */
export const loadGmapApi = (options, loadCn) => {
  if (typeof document === 'undefined') {
    // Do nothing if run from server-side
    return
  if (Env.isServer()) {
    return;
  }

  if (!isApiSetUp) {
    isApiSetUp = true

    const googleMapScript = document.createElement('SCRIPT')

    // Allow options to be an object.
    // This is to support more esoteric means of loading Google Maps,
    // such as Google for business
    // https://developers.google.com/maps/documentation/javascript/get-api-key#premium-auth
    if (typeof options !== 'object') {
      throw new Error('options should  be an object')
    }

    // libraries
    /* eslint-disable no-prototype-builtins */
    if (Array.prototype.isPrototypeOf(options.libraries)) {
      options.libraries = options.libraries.join(',')
    }
    options['callback'] = 'vueGoogleMapsInit'

    let baseUrl = 'https://maps.googleapis.com/'

    if (typeof loadCn === 'boolean' && loadCn === true) {
      baseUrl = 'https://maps.google.cn/'
    }

    let url =
      baseUrl +
      'maps/api/js?' +
      Object.keys(options)
        .map((key) => encodeURIComponent(key) + '=' + encodeURIComponent(options[key]))
        .join('&')

    googleMapScript.setAttribute('src', url)
    googleMapScript.setAttribute('async', '')
    googleMapScript.setAttribute('defer', '')
    const googleMapScript = createMapScript(options);
    document.head.appendChild(googleMapScript)
  } else {
    throw new Error('You already started the loading of google maps')
+32 −0
Original line number Diff line number Diff line
export function createMapScript(options) {
  const googleMapScript = document.createElement('SCRIPT')

  // Allow options to be an object.
  // This is to support more esoteric means of loading Google Maps,
  // such as Google for business
  // https://developers.google.com/maps/documentation/javascript/get-api-key#premium-auth
  if (typeof options !== 'object') {
    throw new Error('options should  be an object')
  }

  // libraries
  /* eslint-disable no-prototype-builtins */
  if (Array.prototype.isPrototypeOf(options.libraries)) {
    options.libraries = options.libraries.join(',')
  }
  options['callback'] = 'vueGoogleMapsInit'
  let baseUrl = 'https://maps.googleapis.com/'

  let url =
    baseUrl +
    'maps/api/js?' +
    Object.keys(options)
      .map((key) => encodeURIComponent(key) + '=' + encodeURIComponent(options[key]))
      .join('&')

  googleMapScript.setAttribute('src', url)
  googleMapScript.setAttribute('async', '')
  googleMapScript.setAttribute('defer', '')

  return googleMapScript;
}

src/utils/env.js

0 → 100644
+5 −0
Original line number Diff line number Diff line
export class Env {
  static isServer() {
    return typeof document === 'undefined';
  }
}
Loading