Giter VIP home page Giter VIP logo

sublime-jsdocs's Introduction

DocBlockr

DocBlockr is a package for Sublime Text 2 & 3 which makes writing documentation a breeze. DocBlockr supports JavaScript (including ES6), PHP, ActionScript, Haxe, CoffeeScript, TypeScript, Java, Apex, Groovy, Objective C, C, C++ and Rust.

Installation

  1. Open Package Control: Preferences -> Package Control
  2. Select Package Control: Install Package
  3. Type DocBlockr into the search box and select the package to install it

Feature requests & bug reports

You can leave either of these things here. Pull requests are welcomed heartily, but please read CONTRIBUTING.md first! Basically: in this repo, the main development branch is develop and the stable 'production' branch is master. Please remember to base your branch from develop and issue the pull request back to that branch.

Show your love

Click here to lend your support to: DocBlockr and make a donation at pledgie.com!

Changelog

  • v2.14.1, 17 Aug 2015
    • Fix deindentation bug with reparsing doc blocks
  • v2.14.0, 15 Jun 2015
    • Adds jsdocs_function_description option (thanks to Gerard Roche)
    • Better handling of parser errors (thanks to Gerard Roche)
  • v2.13.3, 4 Jun 2015
    • PHP array shorthand is identified correctly (thanks to Gerard Roche)
    • Decorating comments when using tabs for indentation works better (thanks to Jack Cherng)
  • v2.13.2, 30 Mar 2015
    • Updated PHPDoc autocompletions to align with the new spec (thanks to Gerard Roche)
    • Properly handle the case when commas appear inside a type name in Java
    • Added link to README in the preferences menu
  • v2.13.1, 29 Mar 2015
    • Adds support for Apex language (thanks @michacom)
    • Fixes identifying multidimensional arrays in C/C++
    • Fixes reformatting and reparsing docblocks in Java
    • Adds options to disable:
      • opening an inline docblock with space (jsdocs_quick_open_inline)
      • inline comment decoration (jsdocs_decorate)

Older history can be found in the history file.

Usage

Below are some examples of what the package does. Note that there are no keyboard shortcuts required to trigger these completions - just type as normal and it happens for you!

Docblock completion

Pressing enter or tab after /** (or ###* for Coffee-Script) yields a new line and closes the comment.

Single-asterisk comment blocks behave similarly:

Function documentation

However, if the line directly afterwards contains a function definition, then its name and parameters are parsed and some documentation is automatically added.

Press Tab to move forward through the fields, press Shift+Tab to move back through the fields.

If there are many arguments, or long variable names, it is sometimes useful to spread the arguments across multiple lines. DocBlockr handles this situation too:

In languages which support type hinting or default values, then those types are prefilled as the datatypes.

DocBlockr will try to make an intelligent guess about the return value of the function.

  • If the function name is or begins with "set" or "add", then no @return is inserted.
  • If the function name is or begins with "is" or "has", then it is assumed to return a Boolean.
  • In Javascript, if the function begins with an uppercase letter then it is assumed that the function is a class definition. No @return tag is added.
  • In PHP, some of the magic methods have their values prefilled:
    • __construct, __destruct, __set, __unset, __wakeup have no @return tag.
    • __sleep returns an array.
    • __toString returns a string.
    • __isset returns a bool.
  • In ES6 Javascript, generator functions get a @yield tag instead of @return

Variable documentation

If the line following the docblock contains a variable declaration, DocBlockr will try to determine the data type of the variable and insert that into the comment.

Press space or shift+enter after an opening /** to insert an inline docblock.

DocBlockr will also try to determine the type of the variable from its name. Variables starting with is or has are assumed to be booleans, and callback, cb, done, fn, and next are assumed to be functions. If you use your own variable naming system, (e.g. hungarian notation: booleans all start with b, arrays start with arr), you can define these rules yourself. Use the jsdocs_notation_map setting, example:

{
    "jsdocs_notation_map": [
        {
            "prefix": "b", /* a prefix, matches only if followed by an underscore or A-Z */
            "type": "bool" /* translates to "Boolean" in javascript, "bool" in PHP */
        },
        {
            "regex": "tbl_?[Rr]ow", /* any arbitrary regex to test against the variable name */
            "type": "TableRow"      /* you can add your own types */
        }
    ]
}

The notation map can also be used to add arbitrary tags, according to your own code conventions. For example, if your conventions state that functions beginning with an underscore are private, you could add this to the jsdocs_notation_map:

{
    "prefix": "_",
    "tags": ["@private"]
}

Comment extension

Pressing enter inside a docblock will automatically insert a leading asterisk and maintain your indentation.

This applies to docblock comments /** like this */ as well as inline double-slash comments // like this

In either case, you can press shift+enter to stop the automatic extension.

Oftentimes, when documenting a parameter, or adding a description to a tag, your description will cover multiple lines. If the line you are on is directly following a tag line, pressing Tab will move the indentation to the correct position.

Comment decoration

If you write a double-slash comment and then press Ctrl+Enter, DocBlockr will 'decorate' that line for you.

// Foo bar baz<<Ctrl+Enter>>

-- becomes

/////////////////
// Foo bar baz //
/////////////////

This can be disabled by changing the jsdocs_decorate setting to false.

Reparsing a DocBlock

Sometimes, you'll perform some action which clears the fields (sections of text which you can navigate through using Tab). This leaves you with a number of placeholders in the DocBlock with no easy way to jump to them.

With DocBlockr, you can reparse a comment and reactivate the fields by pressing the hotkey Alt+Shift+Tab in OS X or Linux, or Alt+W in Windows

Reformatting paragraphs

Inside a comment block, hit Alt+Q to wrap the lines to make them fit within your rulers. If you would like subsequent lines in a paragraph to be indented, you can adjust the jsdocs_indentation_spaces_same_para setting. For example, a value of 3 might look like this:

/**
 * Duis sed arcu non tellus eleifend ullamcorper quis non erat. Curabitur
 *   metus elit, ultrices et tristique a, blandit at justo.
 * @param  {String} foo Lorem ipsum dolor sit amet.
 * @param  {Number} bar Nullam fringilla feugiat pretium. Quisque
 *   consectetur, risus eu pellentesque tincidunt, nulla ipsum imperdiet
 *   massa, sit amet adipiscing dolor.
 * @return {[type]}
 */

Adding extra tags

Finally, typing @ inside a docblock will show a completion list for all tags supported by JSDoc, the Google Closure Compiler, YUIDoc or PHPDoc. Extra help is provided for each of these tags by prefilling the arguments each expects. Pressing Tab will move the cursor to the next argument.

Configuration

You can access the configuration settings by selecting Preferences -> Package Settings -> DocBlockr.

The jsdocs_* prefix is a legacy from days gone by...

  • jsdocs_indentation_spaces (Number) The number of spaces to indent after the leading asterisk.

      // jsdocs_indentation_spaces = 1
      /**
       * foo
       */
    
      // jsdocs_indentation_spaces = 5
      /**
       *     foo
       */
    
  • jsdocs_align_tags (String) Whether the words following the tags should align. Possible values are 'no', 'shallow' and 'deep'

    For backwards compatibility, false is equivalent to 'no', true is equivalent to 'shallow'

    'shallow' will align only the first words after the tag. eg:

      @param    {MyCustomClass} myVariable desc1
      @return   {String} foo desc2
      @property {Number} blahblah desc3
    

    'deep' will align each component of the tags, eg:

      @param    {MyCustomClass} myVariable desc1
      @return   {String}        foo        desc2
      @property {Number}        blahblah   desc3
    
  • jsdocs_extra_tags (Array.String) An array of strings, each representing extra boilerplate comments to add to functions. These can also include arbitrary text (not just tags).

      // jsdocs_extra_tags = ['This is a cool function', '@author nickf', '@version ${1:[version]}']
      /**<<enter>>
      function foo (x) {}
    
      /**
       * [foo description]
       * This is a cool function
       * @author nickf
       * @version [version]
       * @param  {[type]} x [description]
       * @return {[type]}
       */
      function foo (x) {}
    

    Basic variable substitution is supported here for the variables date and datetime, wrapped in double curly brackets.

      // jsdocs_extra_tags = ['@date {{date}}', '@anotherdate {{datetime}}']
      /**<<enter>>
      function foo() {}
    
      /**
       * [foo description]
       * @date     2013-03-25
       * @datetime 2013-03-25T21:16:25+0100
       * @return   {[type]}
       */
    
  • jsdocs_extra_tags_go_after (Boolean) If true, the extra tags are placed at the end of the block (after param/return). Default: false

  • jsdocs_extend_double_slash (Boolean) Whether double-slash comments should be extended. An example of this feature is described above. Default: true

  • jsdocs_deep_indent (Boolean) Whether pressing tab at the start of a line in docblock should indent to match the previous line's description field. An example of this feature is described above. Default: true

  • jsdocs_notation_map (Array) An array of notation objects. Each notation object must define either a prefix OR a regex property, and a type property.

  • jsdocs_return_tag (String) The text which should be used for a @return tag. By default, @return is used, however this can be changed to @returns if you use that style.

  • jsdocs_spacer_between_sections (Boolean|String) If true, then extra blank lines are inserted between the sections of the docblock. If set to "after_description" then a spacer will only be added between the description and the first tag. Default: false.

  • jsdocs_indentation_spaces_same_para (Number) Described above in the Reformatting paragraphs section. Default: 1

  • jsdocs_autoadd_method_tag (Boolean) Add a @method tag to docblocks of functions. Default: false

  • jsdocs_simple_mode (Boolean) If true, DocBlockr won't add a template when creating a doc block before a function or variable. Useful if you don't want to write Javadoc-style, but still want your editor to help when writing block comments. Default: false

  • jsdocs_lower_case_primitives (Boolean) If true, primitive data types are added in lower case, eg "number" instead of "Number". Default: false

  • jsdocs_short_primitives (Boolean) If true, the primitives Boolean and Integer are shortened to Bool and Int. Default: false

  • jsdocs_newline_after_block (Boolean) If true, an extra line break is added after the end of a docblock to separate it from the code. Default false

  • jsdocs_param_name (Boolean) If true, the name of a function parameter is added to the template. If false, it is omitted. Default: true

  • jsdocs_decorate (Boolean) If false, disable decoration of single line comments with Ctrl+Enter. Default: true

  • jsdocs_quick_open_inline (Boolean) If true, an inline docblock will be opened when pressing Space after an opener (/**). When set to false, these can be opened by pressing Shift+Enter. Default: true

  • jsdocs_function_description (Boolean) If true, a 'description' line will be added for functions. Default: true

Contributors

This package was created by Nick Fisher, but has many contributions from others. Please take a look at the contributors list to see who else should get some thanks.

sublime-jsdocs's People

Contributors

danieljl avatar danielkurecka avatar freejosh avatar garyjones avatar gerardroche avatar ghuntley avatar isaachier avatar jfcherng avatar korvinszanto avatar krinkle avatar levacic avatar lxe avatar maparent avatar michacom avatar patik avatar pavel-voronin avatar percyhanna avatar phproberto avatar rcopera avatar ryrun avatar seldaek avatar skuroda avatar spadgos avatar thanpolas avatar tmcsantos avatar wronex 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  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

sublime-jsdocs's Issues

Since renaming, JSDocs ain't found

Everytime I start Sublime Text, I've got now:

"Package Control: The package specified, JSDocs, is not available."

I've uninstalled JSDocs, DocBlockr, gone to my Package Folder, everything was clean. I installed again DocBlockr, and I've got now this issue.

Stop comments from re-closing at the start

If you press enter at the starting marker of an existing comment, the block is closed, whereas it should only add a new line and asterisk.

Situation:

/**|<<enter>>
 * foo bar
 */

Actual:

/**
 * |
 */
 * foo bar
 */

Expected:

/**
 * |
 * foo bar
 */

Doc Blocks in PHP Unpopulated

Doc blocks in PHP will respond correctly to carriage returns, but do not populate any parameters.

The doc block is also not closed automatically.

@return type detection

This is not an issue, rather a request for implementing a feature.

As I can see from the Python source, there is no functionality about guessing a function's return value (in PHP), other than by checking if function's name stars with get / set / add and so on.

It would be very nice if it would look into the function's body and detect return statements. Then we can make a detection algorithm that would rely on typecasts, variable types and so on. If there are many return statements, it is possible to check if they all relate to the same type and suggest it, otherwise just set the return type to 'mixed' instead of [type].

Here are some suggestions on how to detect return type:

If there is a typecast:
return (type)
...will clearly mean that the return type is the one in the brackets.

If the return is a new object / array:
return array(...) or return new Object(...)
In the first case the type is clearly array and in the second it is the object's name.

If the return is a plain value:
return 1 or return 3.14 or return "some string" or return 'another string' etc.
This is actually already implemented in function guessTypeFromValue.

If the return is a variable:
return $var;
Here is where it gets complex. This is rather advanced / extra guess, so its not that important, but it is not impossible to track-back the variable and check for typecasts, plain value assigns and other (the above checks could be used as well).

I do not know Python, so I cannot tell how to implement all these features, but I know they shouldn't be impossible.
I guess the variable track-back could be rather "slow", so it can be an optional feature?

Anyway, I thought I could suggest some "modifications" that I think would be handy for people extensively using such features (like me).

Thanks!

Spaces between each info

It should have spaces between each info.

For instance:

/**
* Short description
*
* Description
*
* @param type $variable1 description
* @param type $variable2 description
*
* @return type $variable description
*/

For the moment, it's more

/**
* Short description
* Description
* @param type $variable1 description
* @param type $variable2 description
* @return type $variable description
*/

Documenting variables

PHP uses a @var tag, and JS apparently uses @type for the same.

I changed the formatVar function to

    if self.inline:
        out.append("@%s %s${1:%s}%s ${1:[description]}" % (
            self.settings['typeTag'],
            "{" if self.settings['curlyTypes'] else "",
            valType,
            "}" if self.settings['curlyTypes'] else ""
        ))
    else:
        out.append("${1:[%s description]}" % (escape(name)))
        out.append("@%s %s${1:%s}%s" % (
            self.settings['typeTag'],
            "{" if self.settings['curlyTypes'] else "",
            valType,
            "}" if self.settings['curlyTypes'] else ""
        ))

and added approriate settings for typeTag in the language settings.

Allow for other contexts (css)

Namely, CSS / Sass / SCSS is what I'm wanting.

While there is acutally a cssdoc spec: http://cssdoc.net/, I don't so much care about that, as it would be nice to just have a base level of functionality you could easily extend to specified contexts.

In Textmate, I would just have a docBlock snippet that I applied to all the contexts I wanted. Best way to do that here?

Should not leave trailing spaces

With:

/**
 * FooBar|

pressing enter twice will end up with:

/**
 * FooBar
 *
 * |

with trailing space left in the line that contains a 'star' only. Could plugin clean this up automatically when nothing was entered on a line?

Consolidate settings

In commit ca018cf, the setting was added to Base File, when there already is a jsdocs settings file. These should be consolidated to avoid having multiple places of configuraiton.

Support for more tags

I'm starting to use yuidoc to generate docs for my node.js JS code and a number of the tags are not supported (such as @for).

I don't really care these extra tags are autocompleted or anything, but if I current type @for, it gets replaced by @fileOverview .. very annoying :)

Is there anyway to specify custom @tags that are acceptable?

Comment continuation

It would be nice if plug-in can support just simple comment continuation eg:

// some comment<<enter>>

becomes:

// some comment
// <<cursor>>

same with /* only one *

/*<<enter>>

becomes:

/*
 * <<cursor>>
 */

everything without @ tags support

Bug when removing "@"

Hey,

I've found a bug with DocBlockr and PHP (or maybe more).

Imagine you've got

protected $var

and you use the plugin.

You've got so:

    /**
     * [$var description]
     * @type [type]
     */
     protected $var

So you add a description and you remove the "@type [type]" line. Impossible to add now a '@' character, because the plugin says "unable to open xxxxx/jsdocs-auto-complete.sublime-macro".

Templates

This is my favorite most useful plugin. I only use it for PHP

I am amazed by what you can do with this.

For me I would really like to be able to do something like this...

/**class[ENTER]

/**
 * @class [description] 
 * @description 
 * @version some version
 * @author  Jason Davis
 * @requires Dependencies
 * @todo [description]
 * @example [description]
 */

So at other time it will work like it does now but when I type class after /** it then uses a template for how I want a Class comment to be.

Would really like to see something like this possibly, thanks for the great plugin

Automatically keep docs aligned

It would be sweet if the nice column-aligned docblock layout that the plugin creates when you add a new one was maintained while editing, so you don't have to clean up your formatting afterwards.
I'd also like to see more (or possibly configurable) space between the parameter names and descriptions.

Path hardcode in .keymap and .sublime-menu

Hello,

Package control install jsdoc plugin into Package/JSDocs so this cannot be like that:
"keys": ["@"], "command": "run_macro_file", "args": {"file": "Packages/DocBlockr/jsdocs-auto-complete.sublime-macro"} also in .sublime-menu.

"Star" not added automatically on enter

I just discovered this nice plugin so I'm not sure if it's a bug in the plugin or new ST2 (I'm using dev builds) but here it goes.

I type:

/**|

press enter and it's autocompleted to:

/**
 * |
 */

If I press enter now (no matter if I type something or not) then I get:

/**
 *
   |
 */

So the "star" is not being added.

Tab to indent to align with the tag description

Situation:

/**
 * @param {Number} foo Description description description description
 * |<<tab>>
 */

Actual:

/**
 * @param {Number} foo Description description description description
 *   |
 */

Expected:

/**
 * @param {Number} foo Description description description description
 *                     |
 */

Trigger docblock on key combo

I'm coming from Textmate and I want to trigger a block comment with super+option+\ (instead of typing /**[TAB]

Do you know the easiest way to do this?
Right now ST does start a comment when I do that, but it is just /[CURSOR]/.

User-defined descriptions

eg:

  • variables which begin with opt_.. the description should start with "Optional."
  • variables named callback.. the description should read just "callback to execute when finished"

...or something

Function format problem

Autodoc generation doesn't work, when function is written in this way:

function test(
$param1, $param2)
{}

Return/Enter @ end of comment should un-indent

Currently:

<?php
/**
 * DocBlock...
 */[cursor is here...hit return]
 [and you end up here...( there is a space to the left of the cursor :( )]

So you have to backspace every time to get to the beginning of the line. I know in Textmate you can do option+return and it will bring you to the beginning of line...

@autocomplete

Hi there, first of all kudos for this cool plugin,

I have found a small isuue, I am running latest sublime build on debian linux and when I "@" in a comment, the auto complete window pops up then immediatly closes instead of staying open. Strange. Not 100% sure this is a problem in your plugin or somewhere else in my setup but I can autocomplete any thing else.

Add support for CoffeeScript

It would be nice if you could add support for CoffeeScript, Java, etc. CoffeeScript should be too hard as their is not much difference between .coffee and .js comments/function syntax.

Project Name

As it now supports PHP, maybe the project should change its name.

Variable types should have customisable hungarian notation

Users should be able to define their own hungarian notation which JSDocs would respect. eg:

{
  jsdocs_hungarian_notation_map: [
    {
      "prefix" : "b",
      "type": "bool"  // built-in type: "bool", "function", "string", "int", "float", "number", etc..
    },
    {
      "regex: "rw.*\\d",  // any arbitrary regex
      "type": "Row"       // any arbitrary type
    }
  ]
}

perhaps also add a language selector to these.

Don't work on the firstline of an empty JS file

Hi, this plugin doesn't work on the first line of a js file.

------------------test.js--------------------

/**<< doesn't work here >>

$('something').function () {
/**<< work here >>
};

/**<< doesn't work here >>

Use separate completion files

You really need completely separate completion files for PHP and JS. PHPDoc never uses brackets around type names, so that'll turn out wrong if using a common list. Also, the common list includes a few completions not used in PHPDoc.

Auto indentation for description isn't working.

Hello!

I love this plugin but for whatever reason after a fresh install via Package Control (not sure how to check the version number of the build I'm running but I assume it's the latest available) I can get everything working great except for the auto indentation to description blocks.

Here is an example of what happens (inside a JS file):

/**
 *  A Test Description Block
 *  @param {number} num This is just an example of<<enter>>
 *  when the auto indentation does not seem to work.
 */

Instead of what I thought should happen for it to look like this:

/**
 *  A Test Description Block
 *  @param {number} num This is just an example of<<enter>>
 *                      when the auto indentation does not seem to work.
 */

Here are the Sublime options I have changed from their defaults:

{
    "auto_complete_commit_on_tab": true,
    "color_scheme": "Packages/User/Espresso Soda.tmTheme",
    "ensure_newline_at_eof_on_save": true,
    "font_size": 14,
    "highlight_line": true,
    "line_padding_bottom": 1,
    "line_padding_top": 1,
    "shift_tab_unindent": true,
    "trim_trailing_white_space_on_save": true,
    "jsdocs_indentation_spaces": 2
}

I'm happy to start debugging this if you tell me where to look.

Many thanks for a great addon,
J.

Missing @method support

The ReadMe mentions that @method is supported (if I've understood it right), but typing @method within a doc-block seems to not auto-complete (or even be present in the auto-complete list).

Closing */ proceeded by tab

Found a bug when a comment block's ending */ is proceeded by a tab. In this situation, when you try to hit enter after the */ (to create a new line), it instead duplicates the line, appending it to the end of the line. Something like:

/*
    Awesome comment
*/

Would become:

/*
    Awesome comment
*/  */

If you continue to hit enter, it just duplicates the entire line and appends it to the end:

/*
    Awesome comment
*/  */  */  */

This seems to only happen if tabs or spaces exist on the line, before the ending */. But a tab must be the last character before the */. If you add a non tab or space anywhere on the line, proceeding the */, this bug will not trigger:

/*
    Awesome comment
x   */

Other observations:

  • Indentation (or lack of) on any other line of the block has no impact.
  • Only encountered on OS X, but haven't tried on any other OS.
  • The bug is only triggered when hitting return by itself. Cmd + return, shift + return, alt + return do not trigger.

DocBlockr version: 2012.04.30.04.34.38
OS: OS X 10.7.4
Sublime Version: 2197

Expand snippet on <tab>

I'm used to expanding everything with Tab.
Can this also work with Tab?
Right now my Sublime expands /** to default
/**
*
*/
on Tab.

I've tried finding Key Bindings for this plugin, but I didn't find any.
Could you hint in the correct direction to search if it's easily configurable, please? :)

Reparse DocBlock for snippet fields

It's really annoying when doing something stops tab from jumping to the next field. Add a hotkey to reparse the current docblock to re-enable the fields. This should simply convert everything [in square brackets] to fields.

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.