GithubHelp home page GithubHelp logo

akryum / vue-googlemaps Goto Github PK

View Code? Open in Web Editor NEW
531.0 15.0 60.0 2.83 MB

Integrate Google Maps in your Vue application

Home Page: https://akryum.github.io/vue-googlemaps/

JavaScript 61.95% Vue 36.81% HTML 1.24%
vuejs vuejs2 google-maps

vue-googlemaps's Introduction

vue-googlemaps

npm npm vue2

Integrate Google Maps in your Vue application in a "Vue-way".

This library is Work In Progress. More components will be available in the 1.0 release.

Live demo

The main objective of the library is to use Google Maps using Vue components in a way that feels natural to Vue developpers (with props, events, slots...).

Become a Patreon

Sponsors

Gold

sum.cumo logo

Silver

VueSchool logo Vue Mastery logo

Bronze


Table of Contents

Installation

npm i -S vue-googlemaps
yarn add vue-googlemaps

You need to polyfill some ES2015 features in old browsers.

Usage

You need a Google API key from the developer console.

import 'vue-googlemaps/dist/vue-googlemaps.css'
import VueGoogleMaps from 'vue-googlemaps'

Vue.use(VueGoogleMaps, {
  load: {
    // Google API key
    apiKey: 'your-google-api-key',
    // Enable more Google Maps libraries here
    libraries: ['places'],
    // Use new renderer
    useBetaRenderer: false,
  },
})

Builtin components

(Documentation is work-in-progress)

  • Circle
  • Geocoder
  • Map
  • Marker
  • NearbyPlaces
  • PlaceDetails
  • UserPosition
  • More to come!

Create you own components

Here is an example of what a Marker component would look like:

import { MapElement } from 'vue-googlemaps'

// Those Vue props will update automatically
// (Two-way binding with .sync modifier)
const boundProps = [
  'animation',
  'clickable',
  'cursor',
  'draggable',
  // ...
]

// Events from Google Maps emitted as Vue events
const redirectedEvents = [
  'click',
  'rightclick',
  'dblclick',
  'drag',
  // ...
]

export default {
  mixins: [
    // You need to use this mixin
    MapElement,
  ],

  // When Google Maps is ready
  googleMapsReady () {
    const options = Object.assign({}, this.$props)
    options.map = this.$_map

    // Create Google Maps objects
    this.$_marker = new window.google.maps.Marker(options)
    // Bind the Vue props
    this.bindProps(this.$_marker, boundProps)
    // Emit the events from Google Maps
    this.redirectEvents(this.$_marker, redirectedEvents)
  },

  beforeDestroy () {
    // Teardown
    if (this.$_marker) {
      this.$_marker.setMap(null)
    }
  },
}

Quick Examples

Map with markers

<googlemaps-map
  :center.sync="center"
  :zoom.sync="zoom"
  :options="mapOptions"
  @idle="onIdle"
  @click="onMapClick">

  <!-- User Position -->
  <googlemaps-user-position
    @update:position="setUserPosition"
  />

  <googlemaps-marker
    v-for="marker of markers"
    :key="marker._id"
    :label="{
      color: marker === currentmarker ? 'white' : 'black',
      fontFamily: 'Material Icons',
      fontSize: '20px',
      text: 'star_rate',
    }"
    :position="marker.position"
    @click="selectMarker(marker._id)"
  />
</googlemaps-map>

Place Details

<googlemaps-place-details
  :request="{
    placeId: placeId
  }"
  @results="results => ..."
>
  <template slot-scope="props">
    <div class="name">{{ props.results.name }}</div>
    <div class="address">{{ props.results.formatted_address }}</div>
  </template>
</googlemaps-place-details>

Geocoder

<googlemaps-geocoder
  :request="{
    location: latLng,
  }"
  @results="results => ..."
>
  <template slot-scope="props">
    <div class="name">{{ props.results[1].name }}</div>
    <div class="address">{{ props.results[0].formatted_address }}</div>
  </template>
</googlemaps-geocoder>

Nearby places

<googlemaps-map
  @idle="map => mapBounds = map.getBounds()"
/>

<googlemaps-nearby-places
  :request="{
    bounds: mapBounds
  }"
  :filter="result => !result.types.includes('locality')"
  @results="results => ..."
>
  <template slot-scope="props">
    <div v-if="props.loading">Loading...</div>

    <div v-for="result of props.result">
      <div>
        <img
          v-if="result.photos"
          :src="result.photos[0].getUrl({ maxWidth: 80, maxHeight: 80 })"
        />
        {{ result.name }}
      </div>
      <div>{{ result.vicinity }}</div>
    </div>
  </template>
</googlemaps-nearby-places>

vue-googlemaps's People

Contributors

akryum avatar chrisvfritz avatar homerjam avatar paulpdaniels avatar xzag avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vue-googlemaps's Issues

ๆ›ดๆขๅœฐๅ›พๆœๅŠก้“พๆŽฅ

่ฏท้—ฎ๏ผŒๆœ‰ไฟฎๆ”นๅŠ ่ฝฝ้“พๆŽฅ็š„ๅœฐๆ–นๅ—๏ผŸ
ๆ€Žไนˆ่ฎพ็ฝฎๆ‰่ƒฝ่ฎฉ้กต้ขไธๅŠ ่ฝฝgooglemap็š„ๅœฐๅ›พๆœๅŠก้“พๆŽฅ๏ผŒ ่€Œๆ˜ฏๅŠ ่ฝฝ่‡ชๅทฑ็š„ๅœฐๅ›พๆœๅŠก้“พๆŽฅๅ‘๏ผŸ
ๅœจไฝฟ็”จgoole็š„apiๅŒๆ—ถ๏ผŒ่ฎฟ้—ฎ่‡ชๅทฑ็š„ๅœฐๅ›พๆœๅŠก็“ฆ็‰‡๏ผŸ
้บป็ƒฆๅ›ž็ญ”ไธ‹๏ผŒ่ฐข่ฐข

Uncaught TypeError: Cannot read property 'appendChild' of null

Seems to be an error when building into production, "Uncaught TypeError: Cannot read property 'appendChild' of null"

Vue.use(VueGoogleMaps, {
  load: {
    // Google API key
    apiKey: '***',
    // Enable more Google Maps libraries here
    // libraries: ['places'],
    // Use new renderer
    useBetaRenderer: false
  }
})

new Vue({
  store,
  render: h => h(App)
}).$mount('#app')

I believe this may need to be wrapped in some sort of DOM has loaded handler?

screenshot 2019-03-05 at 17 22 53

show region in map

Hello, Thank you for this awsome plugin, I'm using it in my project.
Can you add region in load config object? Thanks in avdance.

Map asynchronous load callback

In vue, I hope that the map will only be loaded under a certain route. At this time, an error caused by asynchronous loading will occur. Check the source code. The callback function is not provided in the source code.
It is recommended to modify the source to add a callback function.
1561002860(1)

Safari browser back button works only after couple of clicks

I'm using vue-googlemaps in my project.
In Safari browser (desktop, mobile) when I go to the page which contains google map it create few instances of google map and duplicates this page in browser history (after second entering on the page without reloading page).

So browser back button works only after couple of clicks on it.

Nearby places types

Hi There,

Is there a way to specify the type of results? For instance I want to get all the nearby places of type: ['hair_care'] in a 5000m radius?

Also, how can I access these results, I need to match them to locations in my database?

Love this repo!

Using with Nuxt.js

I'm having an issue using this component with Nuxt.js, I wonder if you have any ideas?

The map loads blank and as soon as I attempt to interact I get the following error in the console:

Uncaught TypeError: Cannot read property 'x' of undefined

This is the stripped back test case I'm using (modified version of hello world example):

// pages/index.vue

<script>
import Vue from 'vue'
import 'vue-googlemaps/dist/vue-googlemaps.css'
import VueGoogleMaps from 'vue-googlemaps'

Vue.use(VueGoogleMaps, {
  load: {
    apiKey: API_KEY,
    libraries: []
  }
})

export default {
  data () {
    return {
      center: { lat: 0, lng: 0 }
    }
  },
  methods: {
    ready () {
      this.$refs.map.resize()
    }
  }
}
</script>

<template>
  <div>
    <h1>Welcome!</h1>
    <nuxt-link to="/about">About page</nuxt-link>
    <googlemaps-map ref="map" :center="center" @ready="ready"></googlemaps-map>
  </div>
</template>

<style>
.vue-google-map {
  width: 500px;
  height: 400px;
}
</style>

I found a suggestion that the element may not be ready when the map is initialised so I added an arbitrary delay in the googleMapsReady() function but this didn't help either.

Another suggestion was to try calling resize() which you can see I've tried in this test, again no help.

Thanks in advance!

Use in local component

Is it possible to use this plugin in a specific component, without registering it globally? I am using the map only within one component and would like to register it there locally.

Lazily load Google scripts

It appears as though this will load the scripts from Google on every page - regardless of whether or not they are actually needed on a page. Is there (or could there be) a way of putting this off unless there's actually a component on the page that requires these scripts?

Auto-install issues

Auto-install is breaking my ability to use this plugin. It's finding Vue on the window and auto-installing the plugin with no parameters, so it doesn't get the load setting, so it doesn't attempt to load Google Maps, so the ready events never fire. And I don't see a way to trigger the load manually.

Trying to install the plugin like normal doesn't trigger the install, I assume Vue prevents you from installing the same plugin twice.

Environment: Meteor with your meteor-vue package.

Does the hideAccuracy prop on googlemaps-user-position do anything?

From the source code, it looks like it is supposed to control whether an accuracy circle is drawn, but it doesn't seem to draw anything regardless of whether the value is true or false. It also seems like googlemaps-circle doesn't work at all (seems to be missing any render code). WIP? I don't need either feature, just trying to get a handle on what works.

Custom marker dynamically

Hi !
I would like to custom one marker on click or on hover. It could be by reducing its opacity or changing its icon.
I created my own component like this :

My component markerPlaces.vue

<template lang="html">
  <div>  </div>
</template>

<script>
import { MapElement } from 'vue-googlemaps'
import markerIcon from '~/assets/img/location-pointer.svg'
import { EventBus } from '~/plugins/event-bus.js'

// Those Vue props will update automatically
// (Two-way binding with .sync modifier)
const boundProps = [
	'animation',
	'clickable',
	'cursor',
]

// Events from Google Maps emitted as Vue events
const redirectedEvents = [
	'click',
	'rightclick',
]

export default {
  data () {
    return {
      // create new options object with origin property
      // allows reactivity on filtering
      opt: {
        position : {},
        icon: {}
      }
    }
  },
  mixins: [
    MapElement
  ],
  props: ['marker'],
  // When Google Maps is ready
  async googleMapsReady () {
      const options = await Object.assign(this.opt, {
          position: this.marker.position,
          icon: {
                url: markerIcon,
                scaledSize: new window.google.maps.Size(25, 32)
          }
    }, this.$props)

    options.map = this.$_map

    // Create Google Maps objects
    this.$_marker = new window.google.maps.Marker(options)
    // Bind the Vue props
    this.bindProps(this.$_marker, boundProps)
    // Emit the events from Google Maps
		this.redirectEvents(this.$_marker, redirectedEvents)
},

	beforeDestroy () {
    // Teardown
		if (this.$_marker) {
      // console.log('marker hidden', this.$_marker.marker);
			this.$_marker.setMap(null)
		}
	}
}
</script>

My vue

<template>
  <no-ssr>
    <section style="width: 100%" class="map">
        <googlemaps-map
          ref="mapRef"
          :center.sync="center"
          :zoom.sync="zoom"
          :options="mapOptions"
          @ready="ready"
        >
          <googlemaps-user-position
            :clickable="true"
            @click="centerOnUser"
            :positionStyle="positionStyle"
            @update:position="setUserPosition" />

          <markers-places
            v-for="(marker, index) of markers"
            :key="marker.id"
            :marker="marker"
            :class="{activeMarker: marker.id == selected}"
            @click="updateStateMarker(marker, index)"
          >
          </markers-places>
        </googlemaps-map>
      <div class="map__overlay"></div>
    </section>
  </no-ssr>
</template>

<script>
import mapStyle from '~/assets/json/mapStyle.json'
import * as VueGoogleMaps from 'vue-googlemaps'
import { EventBus } from '~/plugins/event-bus.js'
import markersPlaces from './markersPlaces.vue'
import markerUser from './markerUser.vue'

export default {
  name: 'mapComponent',
  data () {
   return {
    center: { lat: 47.218371, lng: -1.553621 },
    zoom: 14,
    mapOptions: {
      gestureHandling: 'greedy',
      draggable: true,
      zoomControl: true,
      mapTypeId: 'roadmap',
      styles: mapStyle
    },
    positionStyle: {
      path: 'M2.1999999999999993,11a8.8,8.8 0 1,0 17.6,0a8.8,8.8 0 1,0 -17.6,0',
			fillColor: '#2E86DE',
			fillOpacity: 1,
			scale: 1,
			strokeColor: '#8FBBE7',
			strokeWeight: 5
    },
    userPosition: {lat: 48.8445639, lng: 2.422224},
    selected: undefined
   }
  },
  components: {
    'markers-places': markersPlaces,
    'marker-user': markerUser
  },
  computed: {
    // userCoordinates() {
    //   return this.$store.getters['geolocation/getUserPosition']
    // },
    isLocated() {
      return this.$store.getters['geolocation/getIsLocated']
    },
    markers() {
      // console.log('markers', this.$store.getters['geolocation/getLocations']);
      return this.$store.getters['geolocation/getLocations']
    }
  },
  created () {
    EventBus.$on('i-got-swiped', index => {
      this.panToMarker(index)
    })
  },
  methods: {
    setUserPosition(position) {
      console.log('position', position);
      this.userPosition = position
      // push the last watch position in store
      this.$store.dispatch('geolocation/setUserPosition', this.userPosition )
    },
    ready () {
      this.$refs.mapRef.resize()
    },
    centerOnUser () {
      if (this.userPosition) {
        if (this.zoom <= 12) {
          this.zoom = Math.max(15, 12)
        }
        this.$refs.mapRef.panTo(this.userPosition)
      }
    },
    updateStateMarker (marker, index) {
      if (this.zoom <= 12) {
        this.zoom = Math.max(15, 12)
      }
      if(marker !== undefined) {
        this.selected = marker.id
        this.$refs.mapRef.panTo(marker.position)
      }
      // Send the event on a channel (i-got-clicked) with a payload (index of the clicked marker.)
      EventBus.$emit('i-got-clicked', index)
    },
    panToMarker (index) {
      if (this.zoom <= 12) {
        this.zoom = Math.max(15, 12)
      }
      if(this.markers[index] !== undefined) {
        this.center = this.markers[index].position
      }
    }
  }
}
</script>

Is there slot for marker?

I want to customize markers.
It has two lines of text and each line has different style.
And the two lines are wrapped with in a white box with border-radius: 4.
How can I achieve this?

I tried, but don't show anything

The first, very thanks for this ๐Ÿ‘
But don't show anything (Meteor + Vue)

// index startup
import 'vue-googlemaps/dist/vue-googlemaps.css';
import VueGoogleMaps from 'vue-googlemaps';
Vue.use(VueGoogleMaps, {
    load: {
        apiKey: 'my-key',
        // libraries: ['places'],
    },
});
---------------
// Component
<template>
    <div>
        <h2>Map</h2>

        <googlemaps-map :center.sync="center" :zoom.sync="zoom">
        </googlemaps-map>
    </div>
</template>

<script>
export default {
    data() {
        return {
            center: { lat: 13.090618, lng: 103.208516 },
            zoom: 8,
        };
    },
    methods: {
    }
};
</script>

<style scoped>

</style>

when I install the lib from npm ,it report a error

when I install it in a vue demo ,it report a error like flowing this. could you tell me why?

$ npm install -save vue-googlemapsnpm ERR! Unexpected end of JSON input while parsing near '...f352935cc7bbe1d5f644f'

enviroment: vue-simple-project ,webpack

Sometimes I am getting this error ,,Error in data(): "ReferenceError: google is not defined"

This is happening more or less on every second load.
I guess the problem is occurring because the script is being executed before the google maps api is loaded, but I don't know how to sort this out... Any ideas? See the code bellow...

Thanks!

Here is my code from the main:

// Google Maps
import 'vue-googlemaps/dist/vue-googlemaps.css'
import VueGoogleMaps from 'vue-googlemaps'
Vue.use(VueGoogleMaps, {
   load: {
      apiKey: 'AIzaSyDmDuqAPNfa6XEbRVNuaZGhRS6JzGmAmek',
      libraries: ['places'],
   },
})

And the component:

<template>
<googlemaps-map :center.sync="center"
                :zoom.sync="zoom"
                :options="mapOptions"
                @idle="onIdle"
                @click="onMapClick">
   <googlemaps-marker v-for="marker of markers"
                      :key="marker._id"
                      :icon="marker.icon"
                      :position="marker.position"
                      @click="selectMarker(marker._id)" />
</googlemaps-map>

</template>

<script>
import mapStyles from '@/data/mapStyles'

export default {
    name: 'google-map',
    data: () => ({
        mapOptions: {
            minZoom: 5,
            maxZoom: 20,
            draggable: true,
            zoomControl: true,
            scrollwheel: false,
            mapTypeControl: false,
            zoomControl: true,
            zoomControlOptions: {
                position: google.maps.ControlPosition.RIGHT_TOP
            },
            scaleControl: true,
            streetViewControl: false,
            styles: mapStyles
        },

        zoom: 14,
        center: {
            lat: 50.049598, 
            lng: 14.551283
        },
        markers: [

            {
                position: {
                    lat: 50.049598, 
                    lng: 14.551283
                },
                label: {
                    color: 'black',
                    fontFamily: 'Material Icons',
                    fontSize: '20px',
                    text: 'face',
                    // text: 'Conrad and Shark'
                },
                icon: {
                    url : "/static/logo.png",
                    scaledSize: new google.maps.Size(150, 35)
                }
            }
        ]
    }),

    methods: {
        onIdle()  {},
        onMapClick()  {},
        selectMarker(id)  {
            console.log('marker id', id)
        }
    }
}

</script>

<style scoped="">
.vue-google-map {
   position: absolute;
   height: 100%;
   width: 100%;
   left: 0;
   top: 0;
}
</style>

Can't drag and drop map correctly, marker moves with drag direction

This issue occurs on the demo page as well (using Chrome/MacOS): If you try to scroll the map by using drag and drop, it only moves by a very small distance, then sticking until you drag and drop again. As this is a little hard to put into words, I've made a GIF:

feb -15-2018 13-05-01

In my own case, the marker seems to move with the map if I drag and drop:
feb -15-2018 13-07-24

maps.google.com works fine, as other embedded maps (without this Vue component) do.
Any idea what causes this and how to resolve it?

Map language cannot be modified now

Now, whether I use an international domain name or a Chinese domain name, the map display is in Chinese, I hope to add language configuration in load.Thank you very much.
I can change source code in the development environment, but deployment packaging will be re-downloaded.

Any way to get around the You have included the Google Maps API multiple times on this page.

Hi,

I'm working on an app that were migrating to Vuejs, we have multiple maps in the app and are migrating the maps one at a time to use vue-googlemaps but we get the waning "You have included the Google Maps API multiple times on this page".

Is there any way to pass in the google maps that is loaded outside of Vue so we don't load two instances of maps.

Any suggestions would be appreciated.

Stuart

How do I get the reference for the map?

I wanted to put an infowindow on markers when I click them, but I can't seem to "open" the infowindow because I don't have the reference for the map initialized on the page.
Do you have a documentation for this package? I can't seem to understand much of how to use this, but somehow I have made it work now. Please observe the code I put on pastebin:

https://pastebin.com/VYMCvS9m

I don't know if I got the reference of map right, but everytime I run infowindow.open(map, marker), I always get b.get is not a function. Please help!

google is not defined

I would like to resize all my markers with this option :

scaledSize: new google.maps.Size(20, 35)

However I had the error
google is not defined

Can Markers support InfoWindow?

I've attempted to add content when rendering the Marker components, but the "slot" content seems to just be ignored.

<googlemaps-marker
  :key="..."
  :title="..."
  :position="..."
>
  <div>Info Window</div>
</googlemaps-marker>

I see comments in the code about supporting the infowindow inside a Marker, but it doesn't seem to work as I would expect.

render (h) {
  if (!this.$slots.default || this.$slots.default.length === 0) {
    return ''
  } else if (this.$slots.default.length === 1) {
    // So that infowindows can have a marker parent
    return this.$slots.default[0]
  } else {
    return h(
      'div',
      this.$slots.default
    )
  }
},

Am I missing something? Thanks for the work you're doing!

How can I move marker Location

I am trying to build a realtime location tracker for a delivery system. There I need to change the marker location based on lat long. How can I do that?

I am using like this may be wrong

`

<googlemaps-user-position
@update:position="setUserPosition" />

                <!-- Marker -->
                <googlemaps-marker
                    title="Paris"
                    :position="latlang" />
            </googlemaps-map>`

and I am changing setUserPosition, latlang and center lat long. it changes the position but cannot see the market.

The marker is not generated

Hi I tried to use your plugin in a basic way: basic map and one marker with icon.
But I have some problems. The marker is visible in the VueDevtools, but not on the page... I tried both with icon and without it..
I use nuxt.js, but I have already tried both server-side an client-side render, but I had no success.. :-(
The map is working, but not the marker.

It is my code..

<div class="contacts__map">
	<googlemaps-map class="map"	:center="{lat: -25.363, lng: 131.044}" :zoom="17">
		<googlemaps-marker :position="{lat: -25.363, lng: 131.044}"></googlemaps-marker>
	</googlemaps-map>
</div>

and devtools
image

Not working in IE 11

Does not work in IE 11 V. 11.0.9600.18792

"Object doesn't support property or method 'assign'" in console when trying to view the demo.

Whan I drag the map the marker is not moving with it

When I drag the map, the marker is not moving with it, but stay at the center of the map.
<googlemaps-map class="map" style="height:600px;" :center.sync="centerMap" :zoom.sync="zoom"> <googlemaps-marker title="You" :draggable="false" :key="1" :position.sync="centerMap"></googlemaps-marker> </googlemaps-map>

export default { data() { return { centerMap: { lat: 48.853, lng: 2.298 }, zoom: 14 } }, }

Here is a short demo of the issue:
https://drive.google.com/open?id=1L_EwjmGV603k84aZuTVdGSbHPk0auQ5U

Using PlaceIDs for setting markers (NuxtJS)

I tried to play for small side project with vue and google map in NUXT.
I want to set a custom map in my page with a collection of my favorite bars in a city (i.e: Berlin).

I set a map with a couple of markers using the documentation.
The markers are set now via position (lat and lng), but they are not in the right place. I mean, they are almost in right place, but just the position seems not enough and also they does not "recognize" there is a Bar at that position.

Then I discover Places ID, and the bars I want to track they are having already an ID. Perfect I would say.

So I want to remove lang and lng and using a Place ID instead.

I set a basic codepen using plain JS and the Goggle map logic following documentation.
Here the link, it should be also my final gol with Vue + Nuxt
https://codepen.io/stellavalerio/pen/JOOMxE?editors=0010

But now ... not sure how to do it with the plugin, even with Nuxt.
The documentation is not clear to me.

Anyone has some suggestions, snippets or info to share?

My project is https://github.com/valeriosillari/vue-nuxt-test :)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.