Giter VIP home page Giter VIP logo

vue-tables's Introduction

Vue Tables

Note: using strings as templates is deprecated and will be removed in an upcoming release. Please use functions instead.

npm version Build Status

Users of VueJs 2 please use this package instead.

This Vue package offers an easy and intuitive way of displaying Bootstrap-styled grids with data coming either from the client or from the server.

Dependencies

  • Vue.js (>=1.0). Required. (NOT 1.0.27)
  • Bootstrap (CSS). Optional.
  • vue-resource (>=0.9.0) (server-side component only)

Installation

Option 1

Compile the code using browserify with the stringify transform, or webpack

npm install vue-tables

Require the script:

var VueTables = require('vue-tables');

Option 2

Import the compiled standalone file into your HTML, which will expose a global VueTables variable.

Usage

Register the component(s)

Vue.use(VueTables.client, options);

Or/And

Vue.use(require('vue-resource'));
Vue.use(VueTables.server, options);

If you wish to customize the table template itself, pass the altered version as the third argument, like so:

Vue.use(VueTables.client, {}, { template: require('./my-template.html') });

Client Side

Add the following element to your page wherever you want it to render. Make sure to wrap it with a parent element you can latch your vue instance into.

<div id="people">
  <v-client-table :data="tableData" :columns="columns" :options="options"></v-client-table>
</div>

Create a new Vue instance (You can also nest it within other components). An example works best to illustrate the syntax:

new Vue({
  el:"#people",
  data: {
    columns:['id','name','age'],
    tableData: [
      {id:1, name:"John",age:"20"},
      {id:2, name:"Jane",age:"24"},
      {id:3, name:"Susan",age:"16"},
      {id:4, name:"Chris",age:"55"},
      {id:5, name:"Dan",age:"40"}
    ],
    options: {
      // see the options API
    }
  }
});

Important: when loading data asynchronously add a v-if conditional to the component along with some loaded flag, so it will only compile once the data is attached.

Check out the live client-side demo

Server side

<div id="people">
  <v-server-table url="/people" :columns="columns" :options="options"></v-server-table>
</div>

Javascript:

new Vue({
    el:"#people",
    data: {
      columns:['id','name','age'],
      options: {
       // see the options API
     }
  }
});

All the data is passed in the following GET parameters: query,limit,page,orderBy,ascending,byColumn. You need to return a JSON object with two properties:

data array - An array of row objects with identical keys.

count number - Total count before limit.

Implementations

I have included an Eloquent implementation for Laravel Users. If you happen to write other implementations for PHP or other languages, a pull request would be most welcome, under the following guidelines:

a. Include the class under ./server/{language}.

b. Name it according to convention: {concrete}VueTables.

c. if this is the first implementation in this language add an interface similar to the one found in the PHP folder.

d. Have it implement the interface.

e. TEST IT.

Methods

Use refs to get the instance.

  • setPage(page)
  • refresh() - server component only

Events

vue-tables.loading (server-side)

Fires off when a request is sent to the server. Sends through the request data.

vue-tables.loaded (server-side)

Fires off after the response data has been attached to the table. Sends through the response.

You can listen to those two complementary events on a parent component and use them to add and remove a loading indicator, respectively.

vue-tables.error (server-side)

Fires off if the server returns an invalid code. Sends through the error

vue-tables.row-click

Fires off after a row was clicked. sends through the row

vue-tables.filtered (client-side)

Fires off after a filter was applied to the dataset. Send through the filtered subset.

Custom Filters

Custom filters allow you to integrate your own filters into the plugin using Vue's events system.

Client Side Filters

A. use the customFilters option to declare your filters, following this syntax:

  customFilters: [
    {
      name:'alphabet',
      callback: function(row, query) {
        return row.name[0] == query;
    }
    }
  ]

B. On your application broadcast an event when a filter was applied, and pass the query:

  this.$broadcast('vue-tables.filter::alphabet', query);

Server Side Filters

A. use the customFilters option to declare your filters, following this syntax:

  customFilters: ['alphabet','age-range']

B. the same as in the client component.

List Filters

When filtering by column, the listColumns option allows for filtering columns whose values are part of a list, using a select box instead of the default free-text filter.

For example:

  options: {
    listColumns:{
      animal: [
        {id:1, text:'Dog'},
        {id:2, text:'Cat'},
        {id:3, text:'Tiger'},
        {id:4, text:'Bear'}
      ]
    }
  }

The values of this column should correspond to the values (id) passed to the list. They will be automatically converted to their textual representation.

Options

Options are set in three layers, where the more particular overrides the more general.

  1. Pre-defined component defaults.
  2. Applicable user-defined defaults for the global Vue Instance. Passed as the second paramter to the Use statement.
  3. Options for a single table, passed through the options prop.

EXPLORE OPTIONS


CSS Note: to center the pagination apply text-align:center to the wrapping element

vue-tables's People

Contributors

decebal avatar doogiemuc avatar giohappy avatar grashoper20 avatar jpbetley avatar litan1106 avatar matfish2 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  avatar  avatar  avatar  avatar  avatar

vue-tables's Issues

How to show multidimensional data?

How to deal with multidimensional data like this:

tableData: [{
            id: "1",
            name: "Sidney Brakus",
            age: 113,
            books: [{
                    title: "Harry Potter",
                    price: "$10"
               },
               {
                    title: "Digital Fortress",
                    price: "$20"
               }]
        }, {
            id: "2",
            name: "Jovan Koepp",
            age: 33,
            books: [{
                    title: "Harry Potter",
                    price: "$10"
               },
               {
                    title: "Digital Fortress",
                    price: "$20"
               }]
        }]

Stucked from morning... Any help?

Server side table

Is it possible to disable server request (data load) on page/component init?
So user could set some search filters and then load data (this.$refs.table.refresh()).

Is it possible and is this making sense to add something like this?

this.$refs.table.refresh({
      startdate: %value from form input%,
      enddate: %value from form input%
})

Send parameters from external form.

Multiple pagination

a. For over 10 pages present arrows that allow navigation to the next or previous group of pages.
b. Add optional select box pagination DONE

Dynamic columns?

  • Vue.js version: 1.0.24
  • consumed using: webpack

I am trying to build a table with a few columns predefined and then pushing a few more columns after AJAX, but it doesn't seem to work.

Anything I should be keeping in mind or is it a bug?

Table inside component

How do i use it inside a component? Can't figure out a way.
I get the following error in my console:

Uncaught TypeError: Cannot read property '0' of undefined

At line 45 of lib/v-client-table.js

...
this.allColumns = object_keys(this.data[0]);
...

Template function

Hi, thank you for vue-tables.

There is another question.

On "VueTables Options API" page, there is an example

templates: {
  edit:"<a href={id}><i class='fa fa-edit'></i></a>",
  age:function(row) {
       return this.calcAge(row.birth_date);
  } 
}

In this case this doesn't refer to a Vue instance?
Where method calcAge should be defined? Or am I doing something wrong?
https://jsfiddle.net/w7u7tf7p/

null values in data

When my data set has null values I am getting an isValid exception. I've traced it back to the is-valid-moment-object helper:

module.exports = function(val) { return typeof val.isValid=='function' && val.isValid(); }

My hack was to add (null!==val) to the return:

return (null!==val) && typeof val.isValid=='function' && val.isValid();

Use the jsfiddle to recreate the issue. Simply change one of tableData's property values to null and run:jsfiddle

Could be a better way to address this, but without change how my app returns data, this was the simplest method. Anxious to hear any feedback.

Thanks!

Initializing vue tables drives me crazy

  • Vue.js version: "vue": "^1.0.24",
  • consumed using: webpack
  • FULL error message (including stack trace):

server.created @ funeral-plans.9b70455….min.js:formatted:8069 Vue._callHook @ funeral-plans.9b70455….min.js:formatted:1933 Vue._init @ funeral-plans.9b70455….min.js:formatted:665 Vue._init @ funeral-plans.9b70455….min.js:formatted:5943 VServerTable @ VM803:2 build @ funeral-plans.9b70455….min.js:formatted:3970 mountComponent @ funeral-plans.9b70455….min.js:formatted:3939 (anonymous function) @ funeral-plans.9b70455….min.js:formatted:3918 (anonymous function) @ funeral-plans.9b70455….min.js:formatted:3930 cb @ funeral-plans.9b70455….min.js:formatted:137 Vue._resolveComponent @ funeral-plans.9b70455….min.js:formatted:2067 resolveComponent @ funeral-plans.9b70455….min.js:formatted:3932 setComponent @ funeral-plans.9b70455….min.js:formatted:3917 bind @ funeral-plans.9b70455….min.js:formatted:3908 Directive._bind @ funeral-plans.9b70455….min.js:formatted:4253 linkAndCapture @ funeral-plans.9b70455….min.js:formatted:1399 compositeLinkFn @ funeral-plans.9b70455….min.js:formatted:1385 Vue._compile @ funeral-plans.9b70455….min.js:formatted:1979 Vue.$mount @ funeral-plans.9b70455….min.js:formatted:2352 Vue._init @ funeral-plans.9b70455….min.js:formatted:666 Vue._init @ funeral-plans.9b70455….min.js:formatted:5943 App @ VM804:2 (anonymous function) @ funeral-plans.9b70455….min.js:formatted:6907 _match @ funeral-plans.9b70455….min.js:formatted:6916 onChange @ funeral-plans.9b70455….min.js:formatted:6728 listener @ funeral-plans.9b70455….min.js:formatted:6454 start @ funeral-plans.9b70455….min.js:formatted:6458 start @ funeral-plans.9b70455….min.js:formatted:6808 (anonymous function) @ funeral-plans.9b70455….min.js:formatted:7530 __webpack_require__ @ init.410acd6….min.js:1 (anonymous function) @ funeral-plans.9b70455….min.js:formatted:4 __webpack_require__ @ init.410acd6….min.js:1 webpackJsonpCallback @ init.410acd6….min.js:1 (anonymous function) @ funeral-plans.9b70455….min.js:formatted:1

  • relevant code:
    import VueTables from 'vue-tables'
    import Vue from 'vue'
    Vue.use(VueTables.server, {filterByColumn: false, compileTemplates: true});

    export default {
        name: "App",
        el: "#table",
        props: {
            columns:{
                type: Array,
                required:true
            },
            data: {
                type: Array,
                required: true
            }
        },
        data: function() {
            return {
                columns: ['name', 'phone_number', 'email_address', 'vendor', 'created_at', 'status'],                
            };
        }
    }


        <div class="col-md-6 col-md-offset-3" id="#table">
            <v-server-table v-ref:table :columns="columns" :options="options"></v-server-table>
        </div>
  • steps for reproducing the issue:

I swear I got this working before, but I might have lost a dependency or something on the road and can't find a solution to this:

Uncaught TypeError: Cannot read property '0' of undefined : this.initOrderBy(this.columns[0])

using components in templates

Is it possible to use for example tooltip from vue-strap in template?

<tooltip placement='bottom' content='test'><a><i class='glyphicon glyphicon-th-list'></i></a></tooltip>

works like charm outside vue-tables.
But when I use it in template:
'Proces': "<tooltip placement='bottom' content='dupa dupa dupa'><a><i class='glyphicon glyphicon-th-list'></i></a></tooltip>"

I get: build.js:9218 [Vue warn]: Unknown custom element: - did you register the component correctly? For recursive components, make sure to provide the "name" option.

Can't use <v-server-table>, getting errors

  • Vue.js version: 1.0.21
  • consumed using: browserify
  • steps for reproducing the issue: adding the said tag
    __

Hello,

I've used your client-side example perfectly, although I want to use your server-side with eloquent. Changing the <v-client-side> tag for <v-server-table> gives me this error:

Unknown custom element: - did you register the component correctly? For recursive components, make sure to provide the "name" option.

Live example

Is there a live example of this component to bi viewed anywhere? I am looking for a good server side table component for VueJS and this is by much the only one I have found. Is this project obsolete or still active?

Can't use {id} in parameter sent to event handler method when using UUID

I'm using the following template for a delete button, which doesn't work as it should:

  templates: {
    delete: '<button @click="$parent.deleteClassified({id})" class="btn btn-xs btn-danger"><i class="glyphicon glyphicon-remove"></i></button>'
  }

And I can't get the id parameter to go through to my method, receiving the following error in the console:

Invalid expression. Generated function body: scope.$parent.deleteClassified({scope.id})

I can get the method to be called properly by removing the parameter, but this is useless for a delete button.

My complete vue-tables options look like this:

{
  compileTemplates: true,
  texts:{
    count:'{count} classifieds',
    limit:'# per page:',
    noResults:'No matching classifieds'
  },
  columns:['address', 'size', 'price'],
  headings: {
    address: 'Address',
    size: 'Size',
    delete: 'Delete'
  },
  templates: {
    delete: '<button @click="$parent.deleteClassified({id})" class="btn btn-xs btn-danger"><i class="glyphicon glyphicon-remove"></i></button>'
  }
}

And individual data records look like this:

  {
    "source": "Kijiji",
    "size": "4½",
    "price": 0,
    "address": "204 Rue du Val-des-Neiges, Beaupré, QC G0A 1E0",
    "postedAt": "2016-02-14T03:58:21.000Z",
    "url": "http://www.kijiji.ca/v-appartement-condo-4-1-2/ville-de-quebec/chalet-au-mont-st-anne/1034043903",
    "geoLocation": [
      -70.90793769999999,
      47.0622627
    ],
    "createdAt": "2016-02-14T04:08:11.267Z",
    "updatedAt": "2016-02-14T04:08:11.267Z",
    "id": "56bffdab167e504d681f1208"
  }

What am I doing wrong? I tried using @click="$parent.deleteClassified(id)" but got undefined back.

Leave Glyphicons/Font Awesome up to developer

I am playing with vue-tables, and everything is working just fine except our project uses font awesome with bootstrap instead of glyphicons.

Giving the user the option to change the font package would be nice. I tried to simply do this in a less file, but that didn't work.

.glyphicon:extend(.fa) {};

.glyphicon-chevron-up:extend(.fa-chevron-up) {};
.glyphicon-chevron-down:extend(.fa-chevron-down) {};

Search is available?

Search for a textfield like jquery datatable?
Pass api url for order, search?

Being able to append module template to templates

  • Vue.js version: ^1.0.21
  • consumed using: (webpack)

It would be nice if you could include a template via a module within the template key, instead of pure strings.

  • relevant code:
<template>
      <v-client-table :data="tableData" :columns="columns" :options="options"></v-client-table>
</template>

<script>
import Modal from './Modal'
export default {
  components: {
    Modal
  },
  data () {
    return {
      columns: [],
      tableData: [],
      options: {
        templates: {
          // See here
          operations: Modal
        }
      }
    }
  }
}
</script>

./Modal.vue

<template>
  <a href="#" @:click.prevent="show = !show">Edit</a>
  <div v-show="show">
    <h1>Modal</h1>
  </div>
</template>

<script>
  export default {
    data () {
      return {
        show: false
      }
    }
  }
</script>

Missing / broken stringify dependency

  • Vue.js version: 1.0.16
  • consumed using: browserify
  • FULL error message (including stack trace):
Browserify Failed!: Cannot find module 'stringify' from '/home/<hidden>/www/app/node_modules/vue-tables'
{ [Error: Cannot find module 'stringify' from '/home/<hidden>/www/app/node_modules/vue-tables']
  stream: 
   Labeled {
     _readableState: 
      ReadableState {
        highWaterMark: 16,
        buffer: [],
        length: 0,
        pipes: [Object],
        pipesCount: 1,
        flowing: true,
        ended: false,
        endEmitted: false,
        reading: true,
        sync: false,
        needReadable: true,
        emittedReadable: false,
        readableListening: false,
        objectMode: true,
        defaultEncoding: 'utf8',
        ranOut: false,
        awaitDrain: 0,
        readingMore: false,
        decoder: null,
        encoding: null,
        resumeScheduled: false },
     readable: true,
     domain: null,
     _events: 
      { end: [Object],
        error: [Object],
        data: [Function: ondata],
        _mutate: [Object] },
     _eventsCount: 4,
     _maxListeners: undefined,
     _writableState: 
      WritableState {
        highWaterMark: 16,
        objectMode: true,
        needDrain: false,
        ending: true,
        ended: true,
        finished: true,
        decodeStrings: true,
        defaultEncoding: 'utf8',
        length: 0,
        writing: false,
        corked: 0,
        sync: false,
        bufferProcessing: false,
        onwrite: [Function],
        writecb: null,
        writelen: 0,
        buffer: [],
        pendingcb: 0,
        prefinished: true,
        errorEmitted: false },
     writable: true,
     allowHalfOpen: true,
     _options: { objectMode: true },
     _wrapOptions: { objectMode: true },
     _streams: [ [Object] ],
     length: 1,
     label: 'deps' } }
  • relevant code:
    Vue.use(require('vue-tables'));
  • steps for reproducing the issue:
    • Fetch vue-tables via npm: npm install vue-tables --save
    • Run browserify (chained through gulp)

I'm trying to use vue-tables in a current project, however, after installing the plugin via npm, the above error occurs (short: Browserify Failed!: Cannot find module 'stringify' from '/home/<hidden>/www/app/node_modules/vue-tables').

Installing stringify manually (npm install stringify --save) resolves the issue, but then breaks my Vue app completely (error: TypeError: plugin.apply is not a function).

[Client-side] Column gets duplicated when is set asynchronously

When the table data is initialized as an empty array and it has templates and columns defined in options, templated columns gets duplicated.

This occurs because you set this.customColumns by differing the this.templatesKeys from this.allColumns. But what if the table data isn't filled yet? It gets duplicated cause this.allColumns doesn't have any key.

You can reproduce this with the following code:

var vm = new Vue({
  el: '#app',
  data: {
    options: {
      columns: ['foo'],
      templates: {
        foo: function(row) {
          return "<h1>" + row.foo + "</h1>";
        },
      }
    },

    data: [],
  }
});

setTimeout(function() {
  vm.$set('data', [{ foo: 'bar' }]);
}, 1000);

Btw cool vue component, thank you!

Daterangepicker not sorting

The daterangepicker (http://www.daterangepicker.com/) is not sorting at all. No matter what interval I set, the records won't display. The field is being parsed with carbon to return in needed format

public function getFootageDateAttribute($date)
{
    return Carbon::parse($date)->format('d-m-Y');
}

also tried with return Carbon::parse($date)->toAtomString();
In the js file, I have dateFormat: "DD-MM-YY", filterByColumn: true, dateColumns: ['footage_date'], . When I inspect with vue dev-tools, the field is footage_date: "03-04-2016"

If I hardcode the date as in the example ( https://jsfiddle.net/matfish2/f5h8xwgn/ ) using

// Courtesy of Tomasz Nurkiewicz (Elegant method to generate array of random dates within two dates)

function randomDate(start, end) {
  return moment(start.getTime() + Math.random() * (end.getTime() - start.getTime()));
}

the date is in this format footage_date: "1974-03-27T18:19:40.364Z" and it works.

Pastebin full js file http://pastebin.com/mS8xpd0n
Client side : http://pastebin.com/xTUcAK98

Check for data.length redundant?

In my code i am often trying to load a table that might have no data in it. I was hoping to get the noResults message of "No matching records" instead of my js returning. By commenting out this section here in v-client-table.js create method
// if (!this.data.length) {
// console.error("v-client-table: the data array must have at least one row object.");
// return;
// }
It seems to have the wanted effect of telling me that i have no matching records. Leads me to believe that you already handle this issue. Might be totally mistaken here though.

X time ago sorting as string instead of moment

The created_at attribute is being passed as a moment object, but it's being parsed as string.

http://i.imgur.com/41xOvDO.png

 ready: function(){
        this.$http.get('/api/footage')
            .then(function(response){
                footages = response.data
                footages.forEach(footage => {
                        footage.created_at = moment(footage.created_at).fromNow()
                })
                this.tableData = footages
            }.bind(this))
    },

Also, how do I set Added to sort by default descending? Thanks in advance

Server side. Search request 2 times

Hello,

  • Vue.js version: 1.0.20

When filtering results, request to the server is made 2 times with the same request parameters.

Code

Vue.use(VueTables.server, {
    compileTemplates: true,
  }
);

new Vue({
  el: '#content',
  options: {
      delay: 500,
      columns:['title','artist', 'album'],
      headings: {
        name: 'Title',
        birth_date: 'Artist',
        age: 'Album',
        edit: 'Edit',
        delete: 'Delete'
      },
      templates: {
        edit: '<button \
              @click="$parent.load({id})" \
              class="btn btn-primary btn-sm mr10">\
                <i v-if="!$parent.loading" class="glyphicon glyphicon-edit"></i>\
                <i v-else class="fa fa fa-spin fa-spinner"></i>\
              </button>',
        delete: "<a href='javascript:void(0);' ><i class='glyphicon glyphicon-erase'></i></a>"
      },
      filterByColumn: false,
      sortable: ['id']
    }
});

Usage with webpack

Did you use this with webpack maybe? Seems to be a problem... I am getting this error:

./~/vue-tables/lib/table-template.html
Module parse failed: /Users/primozrome/Documents/Web/webshop-frontend/node_modules/vue-tables/lib/table-template.html Line 1: Unexpected token <
You may need an appropriate loader to handle this file type.
| <div class="VueTables VueTables--[[source]]">
|   <div class="row">
|     <div class="col-md-6">
 @ ./~/vue-tables/lib/helpers/generate-table-html.js 3:17-50

How to insert row object in compile template

I do i go about getting the row data in compileTemplate.

I am trying to do:
<button class="dropdown-item" @click.prevent="$parent.showEditModal(row)"><i class="fa fa-trash"></i> Delete</button>

Refresh method is undfined

  • Vue.js version: 1.0.24
  • consumed using: (browserify/webpack/pre-compiled): Browserify
  • FULL error message (including stack trace):

admin-bf5856199e.js:53903 Uncaught TypeError: this.$refs.file_manager.refresh is not a functionrefresh @ admin-bf5856199e.js:53903(anonymous function) @ admin-bf5856199e.js:44024
backend.js:1 [vue-devtools] Ready. Detected Vue v1.0.24

  • relevant code:

server table run as: <file-manager feed="feed" v-ref:file_manager></file-manager>

which calls a child component where the template has the server table code.

Then I have a div like so:

<div class="dropzone" id="dropzone-uploader" @click="refresh"></div>

I click that, and it fires method on parent vue:

    reloadData: function() {
        console.log(this.$refs.file_manager);
        this.$refs.file_manager.refresh();
    }  

That last method runs and logs the server object. Which I look through and do not see a method for refresh

I feel like I'm missing something obvious.

Ability to set a class to heading table-cell

I’m playing with vue-tables, it seems to be good, but I need to set the width of certain columns, but I don't find a way to set a class to a heading table-cell. Do you see a solution I’m missing?

Reactive data client side

  • Vue.js version:
  • consumed using: (browserify)
  • FULL error message (including stack trace): N/A
  • relevant code:
<v-client-table :data="tableData" :columns="columns" :options="options"></v-client-table>
module.exports = {
    props: ['user', 'itemCategories'],


    /**
     * The component's data.
     */
    data() {
    return {
        columns: ['name', 'default_markup'],
...
        tableData: this.itemCategories,

Using the client side version of vue-tables, is it possible to make the tableData reactive? So when I add a new item to itemCategories using a form on the same page the item automatically appears in the visualised table.

This is a Question not a Issue:

Hello,

I'm reading the docs and I can see a way in client-side to force a new http request according to the page we are on and the number of records per page.

Is this functionality in place? or is there a event we could hock to?

Tks

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.