Giter Club home page Giter Club logo

domtastic's Introduction

DOMtastic

  • Small, fast, and modular DOM & Event library for modern browsers.
  • Same familiar API as jQuery (but without the extra "weight" of modules like $.ajax, $.animate, and $.Deferred).
  • Dependency-free. Weighs in at only 1KB to 12KB (minified), depending on included modules. Full bundle is about 4KB gzipped.
  • Works great stand-alone or paired up with e.g. Backbone or Angular.
  • The source is written in ES6 format.
  • Rollup and babel are used to create a UMD bundle (supporting AMD, CommonJS, and fallback to browser global).
  • Supercharge your components and extend from the base class.
  • Easy to create a custom build to include or exclude parts.
  • DOMtastic also serves as a starting point for your own application-specific DOM API (read more).

Quicklinks

Build Status Coverage Status BrowserStack Status Code Climate gzip size

Usage

ES6 (with e.g. Babel)

npm install domtastic
import $ from 'domtastic';

CommonJS (with e.g. Browserify)

npm install domtastic
var $ = require('domtastic');

AMD

bower install domtastic
requirejs.config({
  baseUrl: 'bower_components',
  packages: [
    {
      name: 'domtastic',
      main: 'domtastic'
    }
  ]
});

require(['domtastic'], function($) {
  $('.earth').addClass('evergreen').on('sunrise', '.people', awake);
});

Browser Global

<script src="//cdn.jsdelivr.net/npm/domtastic"></script>
$('.planet').addClass('evergreen').on('sunrise', '.grass', grow);

ES6 Class

import $ from 'domtastic';

class MyComponent extends $.BaseClass {
  progress(value) {
    return this.attr('data-progress', value);
  }
}

let component = new MyComponent('.my-anchor');
component.progress('ive').append('<p>enhancement</p>');

Read more in the baseClass article or the docs.

API

every
filter
forEach (alias: each)
indexOf
map
pop
push
reduce
reduceRight
reverse
shift
some
unshift
css
after
append
before
clone
prepend
attr
removeAttr
addClass
hasClass
removeClass
toggleClass
contains
data
prop
appendTo
empty
remove
replaceWith
text
val
html
on (alias: bind)
off (alias: unbind)
one
ready
trigger
triggerHandler
noConflict
$
find
matches
closest
children
concat
contents
eq
first
get
parent
siblings
slice
isArray
isFunction
extend

But it doesn't even have awesomest-method!

As mentioned in the introduction, DOMtastic doesn't feature methods for Ajax, Animation, Promise, etc. Please find your own libraries to fill in the gaps as needed. Here are just some examples:

Please note that you can extend the $.fn object, just like jQuery Plugins.

Feel free to open an issue if you feel an important method is missing.

Browser Support

Latest versions of Chrome, Firefox, Safari, Opera, Android, Chrome Mobile iOS, and Mobile Safari. Internet Explorer 10 and up. IE9 requires a polyfill for classList.

Performance

Run the benchmark suite to compare the performance of various methods of jQuery, Zepto and DOMtastic (tl/dr; it's fast!).

Custom Build

You can build a custom bundle that excludes specific modules that you don't need:

git clone [email protected]:webpro/DOMtastic.git
cd DOMtastic
npm install
npm run bundle -- --exclude=css,dom/html,event/trigger

Alternatively, you can do the opposite and include what you need:

npm run bundle -- --include=array,selector/index,dom/class

Find the output in the dist/ folder.

jQuery Compatibility

Some iterator method signatures in jQuery are different (i.e. non-standard), most notably the index before element argument in each, filter and map). However, a custom build that is compatible with jQuery can be created by using the --jquery-compat flag:

npm run bundle -- --jquery-compat

Build a custom API for your application

You can also build a custom API from the ground up. By default, DOMtastic does it for you, but you can easily do it yourself in a highly custom approach. Grab the $ function from the selector, and extend the $.fn object with methods from specific modules:

var selector = require('domtastic/commonjs/selector'),
  dom = require('domtastic/commonjs/dom');

var $ = selector.$;
$.fn = {};
$.fn.append = dom.append; // Or e.g. _.extend($, dom)
$.fn.prepend = dom.prepend;

module.exports = $;

This way, you don't have the slight overhead of the UMD boilerplate in a custom bundle, and a single location/module to define the API for your application. Works great with either AMD or Browserify.

Tests

Run the hosted test suite in your browser. You can also clone this repo, and run the tests locally with jsdom (using npm test). Run npm run test:bs to run the tests in real browsers using BrowserStack.

Credits

Many thanks to these sources of inspiration:

Thanks to the jsDelivr Open Source CDN for hosting DOMtastic.

Thanks to BrowserStack for their real device cloud.

License

MIT

domtastic's People

Contributors

dodas avatar dryabov avatar greenkeeper[bot] avatar gsouf avatar gyeates avatar jimmed avatar megawac avatar mmnlfrrr avatar tombyrer avatar webpro avatar wikiki 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

domtastic's Issues

$ is undefined in closest.js

The $ variable is used in closest.js, but it's never explicitly imported. I get a TypeError when I use this in the commonjs format with Browserify.

Find and Filter hidden and/or visible elements

Hi,

I'm trying to find and/or filter only visible elements.
I modify the existing matches function to this code. Do you thing this is enough ?

const reVisible = /.*:visible.*/;

export const isVisible = function() {
  const element = this.nodeType ? this : this[ 0 ];
  return !!( element.offsetWidth || element.offsetHeight || element.getClientRects().length );
};

export const matches = ( () => {
  const context = typeof Element !== 'undefined' ? Element.prototype : win;
  const _matches = context.matches || context.matchesSelector || context.mozMatchesSelector || context.msMatchesSelector || context.oMatchesSelector || context.webkitMatchesSelector;
  return ( element, selector ) => {
    if ( reVisible.test( selector ) ) {
      return hexadogJS( element ).isVisible();
    } else {
      _matches.call( element, selector );
    }
  };
} )();

Regards,

.eq() doesn't work on extended class

Just curious if this is intended behavior

Say i wish to extend a new Component using the $.BaseClass

class Component extends $.BaseClass {
    constructor(selector) {
        super(selector)
    }

    doA() {
        console.log('Do A')
    }

}

let component = new Component()

component.doA() // Do A
component.addClass('new-class') // Elements get added new-class

let secondComponent = component.eq(1)

console.log(component) // returns a Component collection
console.log(secondComponent) // returns a DOMtastic collection

secondComponent.doA() // doA is not a function

Determine the index of an element in the parent

Hi,

I didnt find an easy way to get the index of an element in the parent with domtastic.

Here is the jquery way of doing this: var indexInParent = $('.parent .children.active').index();

Would you like domtastic to have this feature ?

$.closest maximum callstack

Hi,

When using $.closest with an object whose the required grand parent is very far away, the javascript engine will stop the execution of the closest method.

$.data doesn't work when hyphen is used

This will not work

div(data-animal-type='dragon')
$('div').data('animal-type'); // undefined

This will work

div(data-animaltype='dragon')
$('div').data(animaltype); // dragon

I think animal-type should work since we see alot of hyphens in HTML documents and is in the spec as well

Missing $.fn

Adding $.fn = $.prototype would let us use jQuery plugins with Evergreen.

Element API is breaking Isomorphic Apps

I have an isomorphic application, and today I tried to replace Jquery by DOMtastic, but one of the files, most specific closest.js is breaking the application, because it is using the new Element dom API. See the attached image below.

screen shot 2016-08-03 at 5 29 45 pm

Uncaught TypeError: when extending base class.

Hello,
Using the latest version:

import { BaseClass } from 'domtastic'

class DropDown extends BaseClass {
	doSomething() {
		return this.addClass('.foo')
	}
}

error:

app.js?716f:15 Uncaught TypeError: Super expression must either be null or a function, not undefined

stack:

app.js?716f:15 Uncaught TypeError: Super expression must either be null or a function, not undefined
    at _inherits (app.js?716f:15)
    at eval (app.js?716f:16)
    at eval (20:50)
    at Object.<anonymous> (app.bundle.js:971)
    at __webpack_require__ (app.bundle.js:679)
    at fn (app.bundle.js:89)
    at Object.<anonymous> (app.bundle.js:809)
    at __webpack_require__ (app.bundle.js:679)
    at app.bundle.js:725
    at app.bundle.js:728
_inherits @ app.js?716f:15
(anonymous) @ app.js?716f:16
(anonymous) @ 20:50
(anonymous) @ app.bundle.js:971
__webpack_require__ @ app.bundle.js:679
fn @ app.bundle.js:89
(anonymous) @ app.bundle.js:809
__webpack_require__ @ app.bundle.js:679
(anonymous) @ app.bundle.js:725
(anonymous) @ app.bundle.js:728

any thoughts?

Support of $.isFunction

Is it possible to include $.isFunction to util module, or make a separate module for it? The code of this function is quite short (jQuery itself uses more complicated code, but IMHO this one is the fastest)

function isFunction(obj) {
    return (typeof obj === "function");
}

I've found it is used by many jQuery plugins (usually to check that the last argument is a callback).

Error in bin/custom

bin/custom triggers following error on my side:

DOMtastic\node_modules\browserify\node_modules\resolve\lib\sync.js:33
    throw new Error("Cannot find module '" + x + "' from '" + y + "'");
          ^
Error: Cannot find module 'bundle-collapser/plugin' from 'src'
    at Function.module.exports [as sync] (DOMtastic\node_modules\browserify\node_modules\resolve\lib\sync.js:33:11)
    at Browserify.plugin (DOMtastic\node_modules\browserify\index.js:342:29)
    at bundle (DOMtastic\bin\custom:59:10)
    at DOMtastic\bin\custom:83:9
    at f (DOMtastic\node_modules\glob\node_modules\once\once.js:17:25)
    at Glob.<anonymous> (DOMtastic\node_modules\glob\glob.js:132:7)
    at Glob.EventEmitter.emit (events.js:95:17)
    at Glob._finish (DOMtastic\node_modules\glob\glob.js:171:8)
    at done (DOMtastic\node_modules\glob\glob.js:158:12)
    at Glob._processGlobStar2 (DOMtastic\node_modules\glob\glob.js:589:12)

I had to patch part of bin/custom to be

        .transform(require('redirectify'), redirectifyOptions)
        .transform(require('babelify'))
        .transform(require('browserify-versionify'), {
            placeholder: '__VERSION__',
            version: pkg.version
        })
        .plugin(require('bundle-collapser/plugin'))

to build it correctly.

PS. I built DOMTastic on Windows, maybe it's the reason of modules are not required automatically.

Chainable toArray?

I am probably overlooking something here, but toArray doesn't seem to be chainable (eg. $(selector).toArray() doesn't work)? It's not in the API doc but used internally, not sure about your rationale to keep it from API?

Using native mode by default seem to be overkilling a bit, as we just want an Array of DOM elements instead of NodeList.

Help to use $.baseclass

Hi,

How can I use $.baseclass to reproduce something like this:

(function (factory){
	"use strict";

	if( typeof define === "function" && define.amd ){
		define("Sortable", [], factory);
	}
	else {
		window["Sortable"] = factory();
	}
})(function (){
	"use strict";

	var
		win = window
		, document = win.document
		, parseInt = win.parseInt
		, noop = function (){}
		, touchDragOverListeners = []
	;

	/**
	 * @class  Sortable
	 * @param  {HTMLElement}  el
	 * @param  {Object}  [options]
	 * @constructor
	 */
	function Sortable(el, options){
		this.el = el; // root element
		this.options = options = (options || {});

		...
	}

	Sortable.prototype = {
		constructor: Sortable,

		_applyEffects: function (){
			...
		},

		...
	};


	function _bind(ctx, fn){
		var args = slice.call(arguments, 2);
		return	fn.bind ? fn.bind.apply(fn, [ctx].concat(args)) : function (){
			return fn.apply(ctx, args.concat(slice.call(arguments)));
		};
	}
	
	...

	// Export utils
	Sortable.utils = {
		bind: _bind,
		...
	};


	Sortable.version = '0.0.1';

	// Export
	return	Sortable;
});

Regards,

Follow on from twitter, JS Architecture help

Hey Lars,

Sorry to bother you with more questions, I really appreciate your help and advise on this though!

I couldn't explain what I want to do in 140 characters so I am using the repo. I have a framework/library currently written all in es5 using standard iife's. I would like to modernise the framework/library by using es6 modules.

I want to use DOMtastic as the base for my framework components (things like modals, tabs etc.) and I would like to rebuild them so they can be chained `$('.myelem').modal(); I would like to use factory functions to achieve this rather than classes and for each one to be imported as an es6 module.

These would be globally callable without importing $ in non es6 scripts. I am using rollup and babel to bundle and transpile my code.

I'm finding it a little difficult to modernise my code as although there is plenty online about es6 modules, it feels like what i'm trying to do is too niche to be documented yet. Either that or i'm misunderstanding how to implement this stuff.

Many thanks for any insight on what i'm trying to do here.

Determine if an object is a domtastic instance

Hi, that's a question before being an issue, but I couldnt find a best place to ask for it.

I'm trying to determine if an object is an instance of domtastic or not.

I ended up with this workaround:

typeof element == 'object' && element.constructor.name == 'Wrapper'

But Wrapper class name is not unique to domtastic, and, though the risk is really minor, it could lead to an error.
Is there a better way to do?

In jquery I would do this:

typeof element == 'object' && element instanceof jQuery

Thanks

Use with webpack & ProvidePlugin

I realise this is really a webpack configuration issue, but I thought you might be able to help ...

I'm using it to load domtastic automagically when $ or jQuery is used. Here's what I have in webpack.config.js under plugins:

new webpack.ProvidePlugin({
    $: path.join(__dirname, 'node_modules', 'domtastic'),
    jQuery: path.join(__dirname, 'node_modules', 'domtastic')
})

This works great on my main bundle.js file if I use $ or jQuery, it requires it as expected. However if I import any other .js as a partial in bundle.js which uses $ it fails to require domtastic. So for example:

bundle.js
import "./partials/script1.js";

partials/script1.js
console.log($);

This results in: Uncaught TypeError: $ is not a function

Any ideas on how I can get this working with partials without manually requiring domtastic on each partial that uses it?

Documentation examples for multiple css() and attr() broken

The example for adding multiple attr is broken:

$('.item').attr({'attr1', 'value1'}, {'attr2', 'value2});

http://domtastic.js.org/doc/#dom/attr

Could be:

$('img').attr({
    width: 100,
    height: 100
});

The example for adding multiple css is similar:

$('.item').css({'border-width', '1px'}, {'display', 'inline-block});

http://domtastic.js.org/doc/#css

Could be:

$('div').css({
    width: 100+'px',
    height: 100+'px'
});

Been using DOMTastic a lot recently and it's been great. Thanks guys.

If I had one feature request it would be Jquery's one helper.

Is this a replacement for jQuery?

Assuming I don't need jQuery's ajax, animate & deferred is this a drop in replacement for jQuery. That is does it provide all of the remaining jQuery functions?

Issue with [email protected]

Hello,

i load [email protected] with [email protected] and chrome. The following error occurs:

trigger.js:169 Uncaught TypeError: CustomEvent is not a constructor
 at isEventBubblingInDetachedTree (trigger.js:169)
 at Object.defineProperty.value (trigger.js:172)
 at __webpack_require__ (bootstrap 8917c05722c78281add6:678)
 at fn (bootstrap 8917c05722c78281add6:88)
 at Object.defineProperty.value (index.js:1)
 at __webpack_require__ (bootstrap 8917c05722c78281add6:678)
 at fn (bootstrap 8917c05722c78281add6:88)
 at Object.<anonymous> (_math-scale.js:18)
 at __webpack_require__ (bootstrap 8917c05722c78281add6:678)
 at __webpack_exports__.a (bootstrap 8917c05722c78281add6:724)

Is that a known issue at the moment? - With [email protected] is everything fine.

Thanks!

Array methods

(Continued from #6)

Array methods can be useful for any collection. Although the current implementation works (just fine for me), I'm not 100% sure on what is the right path to follow, with the least surprises.

  • The array methods are not meant for DOM manipulation (e.g. push != append), just to manipulate the elements in the $collection at hand.
  • The array methods have high diversity in their return value (and thus, chainability):
    • every/some: Boolean
    • indexOf/push/unshift: Number
    • forEach/reverse: collection (this) - chainable
    • filter: new collection - chainable
    • map: Array

Although this is similar to ES5 array methods (except some return a wrapped collection), this might confuse people. Especially the fact that map() just returns an array, not a wrapped collection. If it would do the latter:

var ids = $('div').map(function(el) { return el.id; });
> $(['id0', 'id1']); // not elements = problems
siblings.addClass('bar'); // error
var parents = $('div').map(function(el) { return el.nextSibling; });
> $([sibling0, sibling1]); // useful?
siblings.addClass('bar'); // ok

Also, I don't think it's a good idea to check the return values for the callback, and return a wrapped collection if they're all elements (otherwise an array). This gives "dynamic" return values, degrades performance, increases complexity.

On the other hand, some might like/expect high chainability, and e.g. be able to $(elements).push(element).attr(key, value).

What do you think? I think the current behavior is fine (i.e. stick to regular array methods behavior, not prioritizing on chainability), but I'm very open to your feedback.

Important missing functions

.children()
.each()
.eq()
.filter()
.get() // rudimentary, but good for plugin support
.replaceWith()

Edit:
I had suggested .one(), but removed it because we can just do $(this).off("event", arguments.callee). It's not used very often either from my observation.

Expose a named global instance besides $

Not trying to make DOMtastic more like jQuery, but this seems like a good idea to me.

Imagine writing a simple plugin such as:

(function() {

    $.fn.toArray = function() {
        var length = this.length,
            result = Array(length);
        for (var i = 0; i < length; i++) {
            result[i] = this[i];
        }
        return result;
    }

})();

Without UMD, To be conflict free the author might want to do this:

(function($) {

// code

})(DOMtastic);

first

Hi,

A minor but life saver feature is missing (in my opinion) in domtastic.

It's $element.first() I know it's the same as .eq(0) however its implementation is very lightweight and it can fill a compatibility issue with jQuery.

What do you think ?

Determine if an element "is" the selector

Hi,

How to simulate the .is() function of JQuery ?
I have the following code but how to manage the fact that the selector is already an instance of DOMtastic ?

export const is = function( selector ) {
  const nodes = [];
  each( this, element => {
    if ( ( !selector || ( selector && matches( element, selector ) ) ) ) {
      nodes.push( element );
    }
  } );
  return $( nodes );
};

Regards.

[Feature request] Event namespacing

It would be great to be able to group/namespace events so they can be destroyed together, for example:

function init() {
    store.$main.html(require('./template.hbs'));
    store.$main.on('about.tab-click', tabClick);
    store.$main.on('about.img-click', imgClick);
}
function destroy() {
    store.$main.off('about');
}

Or moving away from the JQuery way:

function init() {
    store.$main.html(require('./template.hbs'));
    store.$main.onGroup('about', 'tab-click', tabClick);
    store.$main.onGroup('about', 'img-click', imgClick);
}
function destroy() {
    store.$main.offGroup('about');
}

trigger with "click" string in type of the event

hi,

if i trigger an event test_click, a Mouseevent is fired and not a CustomEvent and params are empty in the listener.

// Not working
sp$('body').trigger('test_click', {'param1':'value1'});
window.addEventListener("test_click",function(event, toto, tata){
        console.log('param1 = '+event.detail.param1);
});

// Working
 sp$('body').trigger('test_clck', {'param1':'value1'});
window.addEventListener("test_clck",function(event, toto, tata){
       console.log('param1 = '+event.detail.param1);
});

version = '0.10.3'

Small tweaks I would recommend

Hi! Cool library. I love jQuery's syntax and model, no matter what people say about using the native DOM, but also would love something that contains just the essentials. This seems pretty much perfect, and I hope to use it on my next project.

I'm opening this issue to argue for a few tweaks to certain methods, based on my preferences. But I realize they might not align with your goals or use cases, and if so feel free to close.

  • All Array methods: make sure they match ES5 semantics, e.g. (element, index, thisArg); forEach instead of each, maybe add the missing ones.
  • delegate/undelegate: subsumed by on/off; kill these.
  • noConflict: we should be using a module system

data(key) might be "broken" or misleading

I'm not sure if it does what it is intended to do but from what I've understood from the source code, .data(key) only returns values that have already been set a priori.

It is misleading since all the jQuery references made in the introduction of this toolbox. I was expecting .data(key) to return values from .dataset[] standard JS node property.

The solution might be as simple as changing the value of this var DATAKEYPROP = '__DOMTASTIC_DATA__'; to 'dataset'

Well, I'm sure you had some good thought at it when you wrote it. What was the reason?

Thank you

Custom build '--include' not working

DOMtastic version 0.12.1
using the script: npm run bundle -- --include=selector,array,event

results in a file that doesn't export a selector properly. It seems something is going wrong with the rollup import transforms because eslint reports 'selector' being not defined in the following section:

// - the following 'selector' variables are not defined

// line 448
if (typeof selector !== 'undefined') {
  $ = selector.$;
  $.matches = selector.matches;
  api.find = selector.find;
}

It seems that selector.$ from above is supposed to be the exported $ from selector/index.js, which in the output should be $$2

// line 107
var $$2 = function (selector) {
  var context = arguments.length <= 1 || arguments[1] === undefined ? document : arguments[1];
// ...

I have only read about rollup and am new to webpack/babel so I don't want to spend much more time looking further into the issue in case you had any insight.

The library seems great - I'll use the full version in the meantime.

width/height support

I'm start using DOMtastic but found my previous code have many .width()/.height, so is there any way to add these?
or, think, the way get w/ margin w/o margin, w/padding+border, w/o padding+border, etc
maybe plugins?

Event on with '>' selector not working

Hi,

first of all, very good work ;-)

I found an issue with the event on.
If I try to create this kind of event:

$('.div').on( 'click', '>', function() {
alert( 'BLIP' );
});

which is working well with JQuery (see JSFiddle here ), I get the following error with DOMtastic:

SyntaxError: '>' is not a valid selector
TypeError: node.closest is not a function

Same problem with selectors like $( '> .title' )

Do you have any idea how to fix that ?

Regards,

API documentation website not working correctly

Hi Lars,

The API documentation website stopped working correctly a few days ago. All link hashes invariably lead to the showing just the BaseClass page now:

domtastic-docs-bug

Let me know if there's anything I can assist with to fix this.

P.S. Thanks for creating DOMtastic! ;-)

How to deal with 3rd-party plugins that use jQuery in a CMS such as WordPress

Hey Lars,

I just wondered how best to deal with such madness. We use WordPress a lot for client sites and quite often third-party plugins will use jQuery by default which as you can imagine is problematic when we are using DOMtastic for the theme.

Do you have any words of wisdom on this subject?

Thanks,
Matt

.each works differently to jQuery

I have edited the initial question after I found this forEach (alias: each) however it seems to work differently to the implementation. I would like to do this for example:

$('.tabs').each(function(){
   $(this).find('.tab').text('hello'); 
});

It would be great to use DOMtastic as a super fast interchangeable dom library for all dom traversal tasks such as this. It seems like this is the goal afterall

Thanks

$.data equivalent in DOMtastic?

I am playing around with plugins and am wanting to create a few of these. A lot of the examples on how jQuery plugins are structured use $.data to save each instance of the plugin.

One of the best examples is that of John Dugan

If you simply switch jQuery for DOMtastic (using the DOMtastic jquery compat mode too) throws an error. I started to construct my own workaround but thought I would check in with you incase there was a way to do this?

Thanks! ๐Ÿ‘

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.