Giter Club home page Giter Club logo

angularjs-toaster's Introduction

AngularJS-Toaster

AngularJS Toaster is an AngularJS port of the toastr non-blocking notification jQuery library. It requires AngularJS v1.2.6 or higher and angular-animate for the CSS3 transformations. angular-sanitize is required if using the html bodyOutputType.

Build Status Coverage Status

Current Version 3.0.0

Angular Compatibility

AngularJS-Toaster requires AngularJS v1.2.6 or higher and specifically targets AngularJS, not Angular 2-7, although it could be used via ngUpgrade.
If you are looking for the Angular 2-7 port of AngularJS-Toaster, it is located here.

Demo

Getting started

Optionally: to install with bower, use:

bower install --save angularjs-toaster

or with npm :

npm install --save angularjs-toaster
  • Link scripts:
<link href="https://cdnjs.cloudflare.com/ajax/libs/angularjs-toaster/3.0.0/toaster.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js" ></script>
<script src="https://code.angularjs.org/1.2.0/angular-animate.min.js" ></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angularjs-toaster/3.0.0/toaster.min.js"></script>
  • Add toaster container directive:
<toaster-container></toaster-container>
  • Prepare the call of toaster method:
// Display an info toast with no title
angular.module('main', ['toaster', 'ngAnimate'])
	.controller('myController', function($scope, toaster) {
	    $scope.pop = function(){
	        toaster.pop('info', "title", "text");
	    };
	});
  • Call controller method on button click:
<div ng-controller="myController">
    <button ng-click="pop()">Show a Toaster</button>
</div>
  • Close the toast:

    The toaster service exposes a clear function that takes two parameters:

    • toasterId: the id of the toast container you would like to target
    • toastId: the id of the toast you would like to close

    The toaster.pop() function returns an object that contains both the toasterId and the toastId. This object can be passed directly into the clear function to close a toast:

    var toastInstance = toaster.pop({type: 'info', body: 'Hello'});
    toaster.clear(toastInstance);

    You can also provide each argument individually: toaster.clear(1, toastInstance.toastId);

    The following rules apply to the parameters passed to the clear function.

    • If the toasterId is undefined, null, or does not exist AND a toaster container has defined an Id, no toasts will be cleared for that container.
    • If the toasterId is undefined or null, each toaster container without a defined Id will be affected.
    • If the toasterId is passed as *, all containers will be affected.
    • if the toasterId is passed as * and a toastId is not defined, all toasts in all containers will be removed.
    • If the toastId is undefined or null, any container that is targeted via the above rules will have all toasts removed from that container.
    • If the toastId is defined, any container that is targeted via the above rules will remove toasts that match the toastId.

Timeout

By default, toasts have a timeout setting of 5000, meaning that they are removed after 5000 milliseconds.

If the timeout is set to 0, the toast will be considered "sticky" and will not automatically dismiss.

The timeout can be configured at three different levels:

  • Globally in the config for all toast types:
<toaster-container toaster-options="{'time-out': 1000}"></toaster-container>
  • Per info-class type: By passing the time-out configuration as an object instead of a number, you can specify the global behavior an info-class type should have.
<toaster-container toaster-options="
    {'time-out':{ 'toast-warning': 10, 'toast-error': 0 } }">
</toaster-container>

If a type is not defined and specified, a timeout will not be applied, making the toast "sticky".

  • Per toast constructed via toaster.pop('success', "title", "text"):
toaster.pop({
                type: 'error',
                title: 'Title text',
                body: 'Body text',
                timeout: 3000
            });

Close Button

The Close Button's visibility can be configured at three different levels:

  • Globally in the config for all toast types:
<toaster-container toaster-options="{'close-button': true}"></toaster-container>
  • Per info-class type: By passing the close-button configuration as an object instead of a boolean, you can specify the global behavior an info-class type should have.
<toaster-container toaster-options="
    {'close-button':{ 'toast-warning': true, 'toast-error': false } }">
</toaster-container>

If a type is not defined and specified, the default behavior for that type is false.

  • Per toast constructed via toaster.pop('success', "title", "text"):
toaster.pop({
                type: 'error',
                title: 'Title text',
                body: 'Body text',
                showCloseButton: true
            });

This option is given the most weight and will override the global configurations for that toast. However, it will not persist to other toasts of that type and does not alter or pollute the global configuration.

Close Html

The close button html can be overridden either globally or per toast call.

  • Globally:

    <toaster-container toaster-options="{'close-html':'<button>Close</button>', 
        'showCloseButton':true}"></toaster-container>
  • Per toast:

    toaster.pop({
            type: 'error',
            title: 'Title text',
            body: 'Body text',
            showCloseButton: true,
            closeHtml: '<button>Close</button>'
    });

Body Output Type

The rendering of the body content is configurable at both the Global level, which applies to all toasts, and the individual toast level when passed as an argument to the toast.

There are five types of body renderings: 'html', 'trustedHtml', 'template', 'templateWithData', 'directive'.

  • html: When using this configuration, the toast will bind the toast.html to ng-bind-html. If the angular-sanitize library is not loaded, an exception will be thrown.

  • trustedHtml: When using this configuration, the toast will parse the body content using $sce.trustAsHtml(toast.body). It will bypass any sanitization. Only use this option if you own and trust the html content!

  • template: Will use the toast.body if passed as an argument, else it will fallback to the template bound to the 'body-template': 'toasterBodyTmpl.html' configuration option.

  • templateWithData:

    • Will use the toast.body if passed as an argument, else it will fallback to the template bound to the 'body-template': 'toasterBodyTmpl.html' configuration option.
    • Assigns any data associated with the template to the toast.
  • directive

    • Will use the toast.body argument to represent the name of a directive that you want to render as the toast's body, else it will fallback to the template bound to the 'body-template': 'toasterBodyTmpl.html' configuration option. The directive name being passed to the body argument should appear as it exists in the markup, not camelCased as it would appear in the directive declaration (cool-directive-name instead of coolDirectiveName). The directive must be usable as an attribute.
    // The toast pop call, passing in a directive name to be rendered
    toaster.pop({
          type: 'info',
          body: 'bind-unsafe-html',
          bodyOutputType: 'directive'
    });
    // The directive that will be dynamically rendered
    .directive('bindUnsafeHtml', [function () {
          return {
              template: "<span style='color:orange'>Orange directive text!</span>"
          };
    }])
    • Will use the toast.directiveData argument to accept data that will be bound to the directive's scope. The directive cannot use isolateScope and will throw an exception if isolateScope is detected. All data must be passed via the directiveData argument.

    // The toast pop call, passing in a directive name to be rendered toaster.pop({ type: 'info', body: 'bind-name', bodyOutputType: 'directive', directiveData: { name: 'Bob' } }); ```

     ```js
    

    // The directive that will be dynamically rendered .directive('bindName', [function () { return { template: "Hi {{directiveData.name}}!" }; }]) ```

    There are additional documented use cases in these tests.

All five options can be configured either globally for all toasts or individually per toast.pop() call. If the body-output-type option is configured on the toast, it will take precedence over the global configuration for that toast instance.

  • Globally:

    <toaster-container toaster-options="{'body-output-type': 'template'}"></toaster-container>
  • Per toast:

    toaster.pop({
            type: 'error',
            title: 'Title text',
            body: 'Body text',
            bodyOutputType: 'trustedHtml'
    });

On Show Callback

An onShow callback function can be attached to each toast instance, with the toast passed as a parameter when invoked. The callback will be invoked upon toast add.

toaster.pop({
            title: 'A toast',
		    body: 'with an onShow callback',
			onShowCallback: function (toast) { 
			    toaster.pop({
			        title: 'A toast',
				    body: 'invoked as an onShow callback'
				});
			}
});

On Hide Callback

An onHide callback function can be attached to each toast instance, with the toast passed as a parameter when invoked. The callback will be invoked upon toast removal. This can be used to chain toast calls.

toaster.pop({
            title: 'A toast',
		    body: 'with an onHide callback',
			onHideCallback: function (toast) { 
			    toaster.pop({
			        title: 'A toast',
				    body: 'invoked as an onHide callback'
				});
			}
});

Multiple Toaster Containers

If desired, you can include multiple <toaster-container></toaster-container> elements in your DOM. The library will register an event handler for every instance of the container that it identifies. By default, when there are multiple registered containers, each container will receive a toast notification and display it when a toast is popped.

To target a specific container, you need to register that container with a unique toaster-id.

<toaster-container toaster-options="{'toaster-id': 1, 
    'animation-class': 'toast-top-left'}"></toaster-container>
<toaster-container toaster-options="{'toaster-id': 2}"></toaster-container>

This gives you the ability to specifically target a unique container rather than broadcasting new toast events to any containers that are currently registered.

vm.popContainerOne = function () {
    toaster.pop({ type: 'info', body: 'One', toasterId: 1 });
}
      
vm.popContainerTwo = function () {
    toaster.pop({ type: 'info', body: 'Two', toasterId: 2 });
}

This plnkr demonstrates this behavior and it is documented in these tests.

Limit

Limit is defaulted to 0, meaning that there is no maximum number of toasts that are defined before the toast container begins removing toasts when a new toast is added.

To change this behavior, pass a "limit" option to the toast-container configuration:

<toaster-container toaster-options="{'limit':5}"></toaster-container>

Dismiss on tap

By default, the tap-to-dismiss option is set to true, meaning that if a toast is clicked anywhere on the toast body, the toast will be dismissed. This behavior can be overriden in the toast-container configuration so that if set to false, the toast will only be dismissed if the close button is defined and clicked:

<toaster-container toaster-options="{'tap-to-dismiss':false}"></toaster-container>

This configuration can also be overriden at the toast level via the tapToDismiss parameter:

toaster.pop({ type: 'info', body: 'One', tapToDismiss: true });

The toast configuration will always take precedence over the toaster-container configuration.

Newest Toasts on Top

The newest-on-top option is defaulted to true, adding new toasts on top of other existing toasts. If changed to false via the toaster-container configuration, toasts will be added to the bottom of other existing toasts.

<toaster-container toaster-options="{'newest-on-top':false}"></toaster-container>

Other Options

// Change display position
<toaster-container toaster-options="{'position-class': 'toast-top-full-width'}"></toaster-container>

Animations

Unlike toastr, this library relies on ngAnimate and CSS3 transformations for optional animations. To include and use animations, add a reference to angular-animate.min.js (as described in Getting started - Link scripts) and add ngAnimate as a dependency alongside toaster.

// Inject ngAnimate to enable animations
angular.module('main', ['toaster', 'ngAnimate']);

If you do not want to use animations, you can safely remove the angular-animate.min.js reference as well as the injection of ngAnimate. Toasts will be displayed without animations.

Common Issues

  • Toaster always shows up as "info"
    • Your <toaster-container></toaster-container might be placed inside of your routing directive.
    • You have multiple <toaster-container></toaster-container elements without unique toaster-id configuration arguments.
  • [$sce:itype] Attempted to trust a non-string value in a content requiring a string
    • You have not specified: bodyOutputType: 'trustedHtml' when passing html as a body argument.
  • My toasts do not show up when I pop them, but after I perform another action.
    • You are calling toaster.pop() outside of AngularJS scope and a digest cycle is not being triggered. Wrap your toaster.pop() call in $timeout to force a digest cycle.
     $timeout(function () {
        toaster.pop();
     }, 0);

Authors

Jiri Kavulak, Stabzs

Credits

Inspired by http://codeseven.github.io/toastr/demo.html.

Copyright

Copyright ยฉ 2013-2019 Jiri Kavulak, Stabzs.

License

AngularJS-Toaster is under MIT license - http://www.opensource.org/licenses/mit-license.php

angularjs-toaster's People

Contributors

anx-ckreuzberger avatar aubm avatar danieljsinclair avatar davincho avatar e-oz avatar fracz avatar hemdada avatar igmcdowell avatar jakcharlton avatar jdforsythe avatar jirikavi avatar jmontagu avatar joluma avatar kaveet avatar maxdow avatar mibamur avatar narretz avatar peterdavehello avatar philhosoft avatar piotrosz avatar pulsar256 avatar punch83 avatar rmassi avatar ruddell avatar sgurenkov avatar shwei avatar stabzs avatar sybeck2k avatar thienhung1989 avatar willpracht 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

angularjs-toaster's Issues

.min.js not available in git

Hi Jiri,
Let me tell you, first that all, that your work is awesome!

I Just wanted to know if it's possible to add a .min.js in the repository.
I've generated one by myself and I was wondering if you could included as other gits available in the community.

Thanks in advance!
*my apologies if this is not the correct place for this request.

Support for templates

Original question: Is it possible to have support for templates? I'd like to use this but provide my own HTML instead of what the original toaster is using. It would be nice to be able to replace {{toaster.body}} with a specific template.

EDIT
I noticed there is code for toaster.html in there but is it possible to specify a template?

Unstable

I use angular and angular-animate with version 1.2.15
I use AngularJS-Toaster with version 0.4.5 (via bower)

However, it seems Toaster are not stable. Sometime it just didn't show. I still can't get the reason. There is no error message.
Does anyone face this problem also?

Conflict with d3 lib

Hey,

I'm having issues using both: "AngularJS-Toaster" and "angular-nvd3" with d3 library, resulting in:
Cannot set property 'd3' of undefined

Loading from cdnjs

I'd love to use this off of cdnjs.
https://github.com/cdnjs/cdnjs

Do you already deliver to npm? cdnjs has a setting to automatically pull from npm every 4 hours, so after an initial setup, hopefully you can just forget about it. :) Thanks for a great plugin!!

(from cdnjs) Enabling NPM auto update

We automatically update libraries that are also hosted on NPM e.g. Lodash.

This script runs automatically every 4 hours

Update the package.json and configure it as below and submit a pull request.
// Lodash package.json
// ...
"npmName": "lodash",
"npmFileMap": [{
"basePath": "/dist/",
"files": [
"*"
]
}],
// ...
npmName should map to the name of the library on NPM npmFileMap is a white list of files to take from the NPM tarball and host on the cdn basePath will be ignored when copying over to the cdn files is a pattern matcher that you can select many files with

The above example looks in the tarball whose structure might look like

dist/lodash.js
dist/lodash.min.js
README It then will look for dist/* which will find the two files inside the dist folder. It will now copy it over to cdnjs but without the dist path. Such that they will end up. ajax/libs/lodash.js/2.0/lodash.js

Difference with toastr by Jonh Papa

What's the difference for the toastr by Jonh Papa?
I could easily work with the toastr, couldn't I?

myApp.value('toastr',toastr);

Supposing toastr library is loaded.
So, why should I use the AngularJS-Toaster?

Working with Angular 1.3*

Is this working with 1.3? When I add it to my project using the ng-animate 1.2.8 I get a ton of errors.

TypeError: object is not a function

Using Font Icon instead of base64 embedded icon

Hi ,

I think some developer like me would like to use font icon instead of base64 embedded icon. I wonder if you want to go that way.

To achieve that, we just need to change a few lines of code.

Here is the code
Here is how it look in demo

BTW, I used fontawesome in the example.

Sam

Suggestion

$rootScope.$broadcast propagates the event down from the $rootScope until it hits the scope with the directive. For performance reasons it might be better to use $rootScope.$emit and in the directive $rootScope.$on instead of scope.$on.

Anyway, thanks for a great module ๐Ÿ‘

Remove bootstrap dependency

Can you remove the Bootstrap dependency?

Including it can be destructive for sites not currently using bootstrap.

Only Info toast type are shown

For me toaster only show the info message types irrespective of type.

I have tried calling it by

toaster.pop('warning', "Cancelled", "Grouping operation cancelled.");
toaster.pop({type:'error', title: "Error", body:"Oops...something broke. Please try again"});

Always show the green toast with the info icon.

Any idea why??

I have add all the dependices and module in my application but still nothing chnaged. Everytime i do a toaster.pop() it does display toast with the correct title and message but the same info one.

Dependencies

I noticed that the dependency on angular is 1.2.14 and would like to suggest making the dependency the lowest angular&animate needed to make AngularJS-Toaster work.

Broken on 1.2

The latest release (0.4.8) breaks apps using Angular ~1.2.0. Bower now resolves angular-animate to 1.3.0, which depends on angular#1.3.0. This introduces this issue;

Unknown provider: $$qProvider <- $$q <- $animate <- cfpLoadingBar <- $http <- $modal <- modals

Should've been a 0.5 release.

Use as service

How can I use the toaster as a service?
I need to use it in all my project angularjs.
I've tried something, but the ng-controller appears required.
Is there another way?
I need fire the pop() inside any controller.

Angular version in bower.json

In the bower.json file, it is asking for Angular 1.2.6. The latest Angular version is 1.2.26 according to their website, although a recent bower update did find 1.2.27. Either way, Toaster is looking for a version of Angular which isn't out. Locally, the my app builds fine and toaster works as expect. However, when putting it through TeamCity, the bower update fails as it cannot find version 1.2.6 of Angular. I've changed my project to reference release 1.4.5 and TeamCity builds as expected. Is the reference to 1.2.6 a typo?

Failed to load module

I downloaded the zip file. And copy the toaster.js into js folder and toaster.css to css. I used them in the program, they loaded successfully. But when I injected module 'toaster' into my app, it says cannot load module.

Check if the same message already exists.

For example on submit form button click, if no required fields, pop message. But if user click 10 times or continue clicking messages continue to be added to messages stack.

I know that there is no sense for user to do that. But anyway, is there a way that if the same message already exists, then we only extend or reset it's lifetime? May be some bounce animation also?

Accessing the toast instance externally

Hi,

Currently storing a list of notifications that need to be displayed to a user when they open the application in a Database. I needed to capture when either they click on the notification to dismiss it or if its not sticky when the notification closes.

I changed the constructor to this so I could pass a UNID which is the DB reference:

this.pop = function (type, title, body, timeout, bodyOutputType, clickHandler,unid) {
            this.toast = {
                type: type,
                title: title,
                body: body,
                timeout: timeout,
                bodyOutputType: bodyOutputType,
                clickHandler: clickHandler,
                unid:unid
            };

I then modified the removeToast method to broadcast a new event with the toaster object so I can update the DB.

   $scope.removeToast = function (id) {
                        var i = 0;
                        var selectedToaster={};
                        for (i; i < $scope.toasters.length; i++) {
                            if ($scope.toasters[i].id === id){
                                selectedToaster=$scope.toasters[i];
                                break;
                            }
                        }
                        $scope.toasters.splice(i, 1);
                        $rootScope.$broadcast('toaster-Removed',{'toaster':selectedToaster});
                    };

I had already modified the custom click handler - mentioned in another issue:

 $scope.click = function (toaster) {
                        if ($scope.config.tap === true) {
                            if (toaster.clickHandler) {
                                $scope.$parent.$eval(toaster.clickHandler(toaster));
                                $scope.removeToast(toaster.id);
                            } else {
                                $scope.removeToast(toaster.id);
                            }
                        }
                    };

my project is not taking toaster-options

//imported scripts
https://code.angularjs.org/1.2.12/angular.js
bootstrap.min.css
font-awesome.min.css

jquery.min.js
bootstrap.js
angular.min.js

angular-animate.min.js
toaster.js
toaster.css

ui-bootstrap.js
angular-sanitize.min.js
angular-file-upload.min.js
angular-ui-router.min.js
underscore-min.js
smart-table.min.js
//imported scripts

This is the script i am using is there any clashes or any thing wrong i am doing

toaster-container toaster-options="{'time-out': 3000, 'close-button':true, 'animation-class': 'toast-top-center'}"></toaster-container

toaster.pop('hi', "Message", 'hello', 3000, 'trustedHtml', 'goToLink');

It is showing toaster but on the top right side how can i make it to show in center

Note : Its done please close it. Thanks...

Set timeout in pop() method

Is it not possible to have error messages stay until clicked but info go away in a timer? As far as I can tell, this is a service configuration but it would be nice to be able to override the defaults in the pop() method.

Attach actions to the toaster element

Hi,

Is there a way to attach a custom action on the toaster cards? I am currently trying to pop a message that when will resend a verification email to the user.

thanks

Add HTML code to text?

Hello!

Thanks for AngularJS-Toaster.

How can I add html to {{toaster.body}}, from my controllers scopes?

I can save template to file, like templateUrl and then paste necessary html that I need... I can make many templateUrl for each my task and add arrgs to pass what template I want to show at time. But it`s bad way.

Less, Scss availability?

Hi,
it would be nice to be able to apply application corporate styles with preprocessor variables.

toast isn't appear

Hello,

I'm beginner with angularJS and may be don't understand something, but strange thing is happened and toast doesn't appear.

I've made some investigation, here are some results:

  1. Toast has been added in "scope.toasters"
  2. Ng-repeat doesn't catch it.

Solution:

Add "scope.$digest();" on 115 line.

Please provide some other variant or I can make pull request.

Implementation in meanjs.org stack

Has anyone had any success in implementing this into a default meanjs.org application? I can provide details on my setup, if asked. However, my application config & architecture is the meanjs.org stack.

I've spent some time trying to implement it, but there seems to be something wrong with loading the AngularJS-Toaster service, and adding it to my application's dependencies. When I add it to my array of dependencies in core.client.module.js, the application won't load. I've seen similar issues when dependencies are loaded more than once. If I remove it from the dependencies, my app will load but when I add the toaster service to any of my controllers, the controller doesn't seem to load. I'm wondering if there is something that is being done in the Toaster service, or directive, that is not compatible with the meanjs.org stack.

Create tag and update bower.json

It's wrote on the README file that the current version is 0.4 but the bower.json file version is 0.3.0.

Is it possible to update the bower.json file with the current version and create a tag ? Thanks to this, it will be possible to install it using bower.

Toasts won't show up under certain conditions

Hi,

I'm trying to understand an issue that ocurred when I was trying out AngularJS-Toaster like shown below. I'm aware this is not the way to use it, I was just trying to experiment in the Chrome console:

  angular.module('DemoApp').controller('demoCtrl', function($scope, toaster) {
    window._toaster = toaster;
    _toaster.pop('success', "title", "text");
  });

What happens is that I can call _toaster.pop('success', "title", "text"); 20 times in the console, and no toast will show up until the first toast that was created is destroyed after its timeout.

To better understand this, I put together a simple demo, here.

I don't know if the problem is related to AngularJS scoping, or linking the directive, or something else.

I'm using the master version of toaster.js with AngularJS 1.2.0, if that helps.

Thank you!

Document API

Would be appreciated to have the methods and options :D

move 'use strict' directive into function

The global 'use strict' directive might cause problems when the file gets concatenated with legacy code. Please wrap the whole JavaScript file in an anonymous function and place the 'use strict' directive as the first line in the function.

Thank you!

Toaster closeButton option

Hi,

I would like to have a possibility to manually define a way of displaying toaster. For example, I would have an option closeButton on the error notifications.
How can I do that?
I've done something like this, but it doesn't work:

toaster.pop('error', 'Error message', {
closeButton: true
});

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.