Coder Social home page Coder Social logo

cakephp-ajaxmultiupload's Introduction

AjaxMultiUpload Plugin for CakePHP

A full-blown AJAX file uploader plugin for CakePHP 2.0.x and 2.1. Using this, you can add multiple file upload behaviour to any or all of your models without having to modify the database or schema.

You can click on the Upload File button, or drag-and-drop files into it. You can upload multiple files at a time without having to click on any button, and it shows you a nice progress notification during uploads. You can also delete files in edit mode.

As of May 2015, this now uses Dropzone.js to allow file uploads.

How to Use

Download or checkout

You can either download the ZIP file: https://github.com/srs81/CakePHP-AjaxMultiUpload/zipball/master

or checkout the code (leave the Password field blank):

git clone https://[email protected]/srs81/CakePHP-AjaxMultiUpload.git

Put it in the Plugin/ directory

Unzip or move the contents of this to "Plugin/AjaxMultiUpload" under the app root.

Add to bootstrap.php load

Open Config/bootstrap.php and add this line:

CakePlugin::load('AjaxMultiUpload', array('bootstrap' => true));

This will allow the plugin to load all the files that it needs including it's own bootstrap.

Create file directory

Make sure to create the correct files upload directory if it doesn't exist already:

cd cake-app-root
mkdir webroot/files
chmod -R 777 webroot/files

The default upload directory is "files" under /webroot - but this can be changed (see FAQ below.)

You don't have to give it a 777 permission - just make sure the web server user can write to this directory.

Add to controller

Add to Controller/AppController.php for use in all controllers, or in just your specific controller where you will use it as below:

public $components = array('Session', 'AjaxMultiUpload.Upload');

The component will load the required helper automatically so you don't have to manually load it in your controllers.

Add to views

Let's say you had a "companies" table with a "id" primary key.

Add this to your View/Companies/view.ctp:

echo $this->Upload->view('Company', $company['Company']['id']);

and this to your View/Companies/edit.ctp:

echo $this->Upload->edit('Company', $this->Form->fields['Company.id']);

Custom listing of files

If you don't like the custom views that result from this->Upload->view(), you can use the listing() function to custom-list files, or use the file listing for other purposes (generating thumbnails, for instance).

In your view, you can do this:

$results = $this->Upload->listing ($model, $id);

$directory = $results['directory'];
$baseUrl = $results['baseUrl'];
$files = $results['files'];

foreach ($files as $file) {
	$f = basename($file);
	$url = $baseUrl . "/$f";
	echo "<a href='$url'>" . $f . "</a><br />\n";
}

and use the directory, baseUrl, and files data structures to display your files. Look at UploadHelper's view() function to see how the listing() function is used internally.

Add to controllers

Add the following to the delete() function of your Company controller where appropriate (either first line, or right after $this->Company->delete() check):

echo $this->Upload->deleteAll('Company', $id);

Restrict file types to upload

Add a third parameter to the this->Upload->edit() function, which specifies which types you want to restrict the upload to.

echo $this->Upload->edit('Company', $this->Form->fields['Company.id'], "audio/*,image/*,.psd,.pdf");

If you don't specify the third parameter, users will be able to upload all file types (so all files types are allowed by default.)

Documentation on the string to use to specify files / types to upload is in this Stackoverflow answer about Dropzone allowed types: http://stackoverflow.com/a/17275873

Some Gotchas

Thanks to rscherf@github for the following two fixes.

Using Auth

If you are using Auth (either the CakePHP core Auth or some of the compatible or incompatible ones), you need to modify the controller to allow uploads to work.

Add these lines to the UploadsController.php (you may have to modify slightly depending on your Auth setup). Thanks to @notoriousturtle for the fix for CakePHP 2.5 and above.

CakePHP 2.5 and above
public function beforeFilter() {
	parent::beforeFilter();
	// Need to disable Security component
    $this->Security->unlockedActions = array('upload');
}
Before CakePHP 2.5
public function isAuthorized() {
    return true;
}

public function beforeFilter() {
    $this->Auth->allow(array('upload','delete'));
}

Subdomain

If you are using a subdomain, you will have to set up the plugin correctly to work (depending, again, on how you have your sub-domains set up in your Apache/htaccess settings).

These are the changes to be made to routes.php:

// AJAX Multi Upload plugin
Router::connect('/:subdomain/ajax_multi_upload/:controller', array('plugin' => 'ajax_multi_upload'), $ops);
Router::connect('/:subdomain/ajax_multi_upload/:controller/:action/*', array('plugin' => 'ajax_multi_upload'), $ops);

FAQ

Dude! No database/table schema changes?

Nope. :) Just drop this plugin in the right Plugin/ directory and add the code to the controller and views. Make sure the "files" directory under webroot is writable, otherwise uploads will fail.

No tables/database changes are needed since the plugin uses a directory structure based on the model name and id to save the appropriate files for the model.

Help! I get file upload or file size error messages!

The default upload file size limit is set to a conservative 2 MB to make sure it works on all (including shared) hosting. To change this:

  • Open up Plugin/AjaxMultipUpload/Config/bootstrap.php and change the "AMU.filesizeMB" setting to whatever size in MB you like.
  • Make sure to also change the upload size setting ( upload_max_filesize and post_max_size) in your PHP settings ( php.ini) and reboot the web server!

Change directory

Are you stuck to the "files" directory under webroot? Nope.

Open up Config/bootstrap.php under the Plugin/AjaxMultiUpload directory and change the "AMU.directory" setting.

The directory will live under the app webroot directory - this is as per CakePHP conventions.

Change directory paths

By default, the plugin stores files into /webroot/files/$model/$id . It is possible to change the /files/ directory through the configuration setting mentioned above. To change the /$model/$id/ path though (say you want to change it to md5($model . $id)), look for this line in Controller/Component/UploadComponent.php AND View/Helper/UploadHelper.php:

	public function last_dir ($model, $id) {

Change the function in both these files to do whatever you would like. Note that you have to make the changes in BOTH files for this to work.

Multiple Uploads in same view/edit

It is now possible to have multiple view/edit functions in the same CakePHP view. For example, for a Photo controller, add this to your view.ctp:

echo $this->Upload->view('Photo', "thumbs/" . $photo['Photo']['id']);
echo $this->Upload->view('Photo', "highres/" . $photo['Photo']['id']);

and this to your View/Photos/edit.ctp:

echo $this->Upload->edit('Photo', "thumbs/" . $this->Form->fields['Photo.id']);
echo $this->Upload->edit('Photo', "highres/" . $this->Form->fields['Photo.id']);

This allows you to upload and two sets of files to your same entity/object in a controller/view.

ChangeLog

  • Version 1.1.1 / Jul 22 2015: you can now restrict file types that can be uploaded
  • Version 1.1.0 / May 21 2015: now uses Dropzone.js instead of the older file upload
  • Version 1.0.3 / Jul 30 2012: multiple view/edit on same views possible (thanks to bobartlett@github)
  • Version 1.0.2 / Jul 16 2012: deleteAll() and listing() functionality added
  • Version 1.0.1 / Apr 02 2012: Delete functionality - from view() - added
  • Version 1.0.0 / Mar 2012: Initial release

Thanks

This uses the Dropzone.js Javascript library for file uploads: http://www.dropzonejs.com/ and file icons from: http://www.splitbrain.org/projects/file_icons . (The plugin previously used an Ajax Upload script from: http://valums.com/ajax-upload/)

Also, thanks to contributions from the following GitHub users:

  • @rscherf : Getting it to work with Auth and sub-domains
  • @bobartlett : Fix to allow multiple AMU helpers in same view
  • @notoriousturtle : Fix to Auth to get it working in CakePHP 2.5 and above

Support

If you find this plugin useful, please consider a donation to Shen Yun Performing Arts to support traditional and historic Chinese culture.

cakephp-ajaxmultiupload's People

Contributors

bobartlett avatar destinydriven avatar plugs avatar srs81 avatar telerim 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

Watchers

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

cakephp-ajaxmultiupload's Issues

No files saved in folder `files/`

On Cake PHP 2.6 done all instructed in README,
also fixed how to get id value (not from fields[] array, but from value() function),
and edit method placed out of current edit form.

Upload field is shown and thumbnails with big X is created.

Problems:

  1. nothing is saved in files/
  2. nothing is displayed on view page

Undefined variable: result in AjaxMultiUpload\View\Upload\upload.ctp, line 1

When the file uploads is success, there is a warning due an undefined variable "$result". $result is only used for displaying errors but isn´t set for success cases

I suggest to add the following snippet in the upload method

UploadsController.php line 64
else{
$result = array('ok' => 'upload success');
$this->set("result", htmlspecialchars(json_encode($result), ENT_NOQUOTES));
$this->response->type('json');
$this->response->statusCode(200);
}

Restricted upload of file types

Hello,
first of all I want to say thanks to create this plugin.

How can I set one kind of file to upload (for example only PDF) ?

Thanks
-A

php warning message when deleting

To avoid warning message when deleting.

//Controller/Component/UploadComponent.php
public function deleteAll ($model, $id) {
        require_once (ROOT . DS . APP_DIR . "/Plugin/AjaxMultiUpload/Config/bootstrap.php");
        $dir = Configure::read('AMU.directory');
        if (strlen($dir) < 1) $dir = "files";

        $lastDir = $this->last_dir ($model, $id);
        $dirPath = WWW_ROOT . DS . $dir . DS . $lastDir . DS;
        $files = glob($dirPath . '*', GLOB_MARK);
        foreach ($files as $file) {
            unlink($file);
        }
        // CHANGES TO AVOID PHP WARNING MESSAGE
        if ( is_dir($dirPath)) rmdir($dirPath);

    }

Problems with the upload.php save function

I have been having problems with the save function on the upload.php file. For some reason fopen("php://input", "r"); was returning zero bites.

I was able to solve the issue replacing the whole function with:

function save($path) {
        file_put_contents($path, file_get_contents("php://input"));        
        return true;
}

I hope this helps!

Ability to save upload path to DB

I need the ability to save the upload path of any given image to my db so i can use Amazon S3 for image storage. I had no problem implementing the Plugin, Great job on this! I dont think this counts as an actual issue I just couldn't find any contact info for you.

Notice (8): Undefined index:

Hi

Its working fine under my localhost but when i upload it to my host server, it shows
Notice (8): Undefined index: Notice (8): Undefined index: Recipe.id [APP\Plugin\Authake\View\recipes\edit.ctp, line 19]
this is the code

Upload->edit('Recipe', $this->Form->fields['Recipe.id']); ?>

thanks

Upload button not showing

I'm using cake 2.4 and before i added auth and acl components the buttons was showing just right, but after that it doesn't show anymore.
I tried putting "$this->Auth->allow();" ;just to make the button; into the plugin controllers since it worked with anoter plugin, but no...it doesn't work. Is there a way to solve this?

integrate into existing form

Hey there,

just wanted use your plugin but had no success when adding the upload into the form.

You say to add this to the edit view:
"echo $this->Upload->edit('Company', $this->Form->fields['Company.id']); "

How to add the upload function when I have an existing form? I'm asking
because the error message I get refers to this line in "add.ctp" saying:

"Form->create('Model name');?>"

Is there a known issue?

Regards!

Feature Request: Two Upload Buttons in Same View

Thanks for this incredible plugin! I am using it on a client site, and it's a breeze compared to some of the other methods I've used for image uploads with CakePHP in the past.

I'm using it on this project in two ways -- for any given Post ID, I'm creating a featured image and a gallery of images (with Fancybox). The user can upload to either of the two folders.

I copied your edit action in UploadHelper.php and added a featured action and a gallery action. They are basically identical.

Folder creation works successfully - I have Post/ID/featured and Post/ID/gallery in my folder structure. However, the view for $this->Upload(); is only rendering one upload button, and the upload is sending the image to whichever action is last. Here's the code for my form:

<?php

            $id = $this->data['Post']['id'];
            $dir = 'Post/'.$id;
            $featured_image = $dir . '/featured';

            echo $this->Form->create('Post', array('action' => 'edit'));
            echo $this->Form->input(__('title'));
            echo $this->Form->input(__('body'), array('rows' => '5'));
            echo $this->Form->checkbox(__('featured'),array('value' => 1));
            echo __('<h4>Check if Featured</h4>');
            echo '<br>';
            echo '<h4>Add a Featured Image</h4>';
            echo '<span style="font-size:12px; font-style:italic;">The featured image will be displayed at the top of your news item.</span><br><br>';
            echo $this->Upload->featured($dir, '/featured');

            echo '<h4>Add Gallery Images</h4>';
            echo '<span style="font-size:12px; font-style:italic;">The gallery images will be displayed in a lightbox gallery at the bottom of your news post.</span><br><br>';
            echo $this->Upload->gallery($dir, '/gallery');

            echo $this->Form->input('id', array('type' => 'hidden'));
            echo $this->Form->end(__('Save Post'));
         ?>

So I guess the question is how to create two instances of `$this->Upload();'. Any ideas?

Thanks again for your help! You rock!

Preventing orphaned files on delete

This is a nice looking plugin, and I'm hoping to use it.

Deleting files on the edit view works great, but what if a user deletes an object that has files attached -- is there any way to trap this so any attached files can also be removed from the filesystem? Otherwise they are orphaned.

Thanks!

IE9 issue

Great plugin Thanks! I implemented this plugin with ease and it works great. Tested it in all browsers and it works but not in IE. Big surprise I know :) The files that got uploaded by the other browsers show in IE but the “Upload a file” button is missing. If I inspect the code there is no sign of the “Upload a file” link/button. I use jquery UI and other java scripts and they all work in IE.
Any idea as to what to look for?

submit button

thank you for this plugin it work prefect but the problem is adding files automatically when uploading file
i want to add submit button , i mean upload files after the on submit

can you help me please ?
thanks in advance
and excuse me for my English

How save an extra data in database?

Hello, thanks for this Plugin, works great, i have a dude, when the image is saved only save the ID in the database, how can i save the image name in my DB?

I hope you can help me please.

Thanks.

Upload failed

This is a nice plugin, and we've been using it for a while. Thank you.

My users are in the habit of uploading like 10-20 files at once - i.e. just dragging a bunch of items from the desktop into the upload area on the page - and it seems that certain files in that set randomly fail. A functional workaround seems to be to simply upload files in smaller batches, like 3-4 at any one time.

If you then save the item, the attachments that uploaded OK all save fine, but of course then it's sort of a hassle to figure out which files failed to upload that you can re-attach them.

Have you seen this behavior before?

Here is what they see:

https://dl.dropboxusercontent.com/u/100305526/permanent/Screen%20shot%202013-07-24%20at%2010.15.54%20AM.png

Notice (8): Undefined index:

A previous user had the same issue with this message, but he didn't give the feedback of how to solve it. So someone can share the solution plase do it.

Same code error
echo $this->Upload->edit('Document', $this->Form->fields['Document.id']);

I'm using cakephp 2.3.1, btw I already read same issues related with this plugin here, as srs81 points some error in Model, but I already check it and not present an error at all.

Greeting

AMU Form inside Ajax response javascript not enabled

Hi,

I put a AMU Edit Form inside a ajax response with jquery. The problem is there is no Upload button displayed, so I can't upload files.

Inside the AjaxMultiUploadPost___x Div, there is only the Noscript tag that invite me to enable Javascipt to use File Uploader. If I use the Edit action directly without Ajax, then all is working perfectly.

Is someone know a solution of this situation ?

Thank you.

Only "Files" word

Hi there, I have followed three times your instructions to implement the plugin but the result is always the same, I only get the word "Files" at the place of the form, I'm puting it at the index view: View/Terms/index.ctp, but I tried at the view.ctp file also and it happens the same.
Just in case:
cakephp/app/Plugin/AjaxMultiUpload# ls
Config Console Controller Lib LICENSE Model README.md Test Vendor View webroot
Add to bootstrap.php load => done
Create file directory => done
Add to controller => done
Add to views => View/Terms/index.ctp => <?php echo $this->Upload->view('Term', $term['Term']['id']); ?>

thanks for your help

Setting allowedExtensions from within my controller

First, let me thank you for your fine plugin.

Second, I'm new to GitHub so maybe this is not the proper place for this, but...

I would like to be able to modify the list of allowedExtensions from within the controller that I have attached the AMU component to.

I have a working installation but in my Tracks controller I want to restrict the file types to ".mp3" files and in the Images controller I want only ".jpg" or ".png" files.

In my Tracks controller I have tried to accomplish this by putting the following line in my beforeFilter() function as follows:
$this->Upload->allowedExtensions = array('mp3');

It has no effect.

Conversely, when I edit the AMU UploadsController.php file like this:
protected allowedUploads = array('mp3');
I get the expected result - i.e. when trying to upload a file other than mp3, an error is issued.

Should there be a setAllowedExtensions() method in UploadCompnent?

Any suggestions?

Thanks,
Ken

Security issue?

It seems this plugin violates two basic rules:

  1. Uploads are inside the webroot
  2. File names are not renamed to prevent remote access

This allows someone to upload a pwn.php file then run it via /files/pwn.php

While I haven't checked further there could be other issues based on comments I've seen:

  1. If overwrites are not checked, then multiple users could destroy each other's data by uploading different readme.txt files at the same time.

Upload with no id present (Add view)

I'm unable to upload in my add view because of an undefined index

Notice (8): Undefined index: Document.id

Seeing as the id isn't yet present within the db table, is it possible to add files to the upload list, then invoke public $components = array('AjaxMultiUpload.Upload'); in an afterSave callback, something like:

function afterSave($created) {
if($created) {
public $components = array('AjaxMultiUpload.Upload');
}
}

This of course doesn't work because there is no component loaded within the controller itself. I couldn't think of another way to do this while adding a new record.

Any ideas?

Getting a MissingControllerException

I'm pretty excited to use this -- although I can't seem to get it to work. I'm getting this error:

2012-05-24 10:54:52 Error: [MissingControllerException] Controller class AjaxMultiUploadController could not be found.
#0 /Users/ryanscherf/workspace/Osmosis/app/webroot/index.php(97): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))
#1 {main}

I've installed everything, per your instructions in the README, and the form renders on the page, but when I drag an item to upload, it fails and drops that error on me. Any thoughts would be helpful...

dropBox is not visible in the form

Hi,

I am using the following code inside edit.ctp but the drop box is not visible here.

Form->create('UseType'); ?>
<fieldset>
    <legend><?php echo __('Edit Use Type'); ?></legend>
<?php
    echo $this->Form->input('id');
    echo $this->Form->input('name');
    echo $this->Form->input('description');
    echo $this->Upload->edit('UseType', $this->Form->fields['UseType.id']);
?>
</fieldset>
Form->end(__('Submit')); ?>

but when I use the following code alone , it is visible

Upload->edit('UseType', $this->Form->fields['UseType.id']);?>

I tried this in cakephp 2.6 with default theme.
Please resolve this.

File parameter missing

Hi there,

Thanks for this awesome plugin. However, I am having an issue with deleting some files. When I upload any file, it uploads properly but when deleting some files, it gives me "file parameter missing" but for other files, they delete fine. Not sure what the problem is. Eg. I uploaded two .png files that are of different file names, one of them deleted fine, the other raises the "file parameter missing" error.

Hope you can help me with this.

Thanks!

IE9 bug

Hi!

I saw, that someone posted an issue with IE9 compability. He had trouble with the upload button and i have the same problem with it, but i already know what causes it. The problem is with this part of the UploadHelper (edit funciton) ->

function createUploader(){
var amuCollection = document.getElementsByName('AjaxMultiUpload');
for (var i = 0, max = amuCollection.length; i < max; i++) {
action = amuCollection[i].id.replace('AjaxMultiUpload', '');
window['uploader'+i] = new qq.FileUploader({
element: amuCollection[i],
action: '".$webroot."/uploads/upload/' + action + '/',
debug: true
});
}
}
This creates the upload button, but in IE you can't get the elemenets by their names, only if the elements are form elements. The amuCollection variable will be empty. It doesn't work with div except if the id and name are the same. It's really annoying.

Adding a file from add()

I really like how this uploader works! One thing that I am trying is to add files when I am initially adding a record. I can add files during the edit process, but it seems like you can't add files until after a record has been saved and there is an id. Is there a way around this?

Upload failed

Hellow there, first off i want to congratulate you for the hard efforts you've put into this plugin, especially that it's adapted in CakePHP 2.0+, as im running on Croogo 1.4.4 (Cakephp 2.1.5).

Now, i implemented the upload button, which is generating perfectly on the page that i want. However, the upload keeps failing.

I would just want to know the scenarios that could cause the file upload to fail, and i'll take it from there

regards,
amjo

Show the image itself

Hi there,

first of all, really great plugin, working perfectly
I just wanted to ask, is there any way to show the picture thumbnail if i chose to upload a picture rather than showing the name of file?

Any help would be greatly appreciated

Subfolder - ID Problem

Hi,
I've got the same problem as here:
#1

the only difference is, that i use no companies, i want to use users, so that the users can upload files. the plugin should create subfolders with the users id but it doesn't.

also i got the error message:
Notice (8): Undefined index: User.id [APP/View/User/edit.ctp, line 138]
where I have the code:
echo $this->Upload->edit('User', $this->Form->fields['User.id']);

id is the primary key of the table user and i use scaffold function. but i created the edit view.

i have tried the same with customers (every user can create customers so 1:n) and there it works great.
the subfolders are created and i can see only the files which are in the subfolder with my id.

don't know why it doesn't work with users. need help please.

backslash in a href in view and edit pages

When I click on the image text links to view the enlargements it goes to localhost/myapp/files\ConslAttachment/2 which has a backslash in it. Is this because I am using wamp/apache/etc on windows 7 locally? is there a fix to this?

Filename for database

Hi,

Is there a way to get the filename that has been uploaded as a parameter so it could be parsed into a url? Because the user will be redirected to an edit page where some info (like title of image) will be added onto the database along with the url to the image which is why I need the name of the file.

Thank you

How to connect helpers and components in Cake 2.2.2?

Hi
I tried these lines but it doesn't work:

var $helpers = array('AjaxMultiUpload.Upload');
var $components = array('Session', 'AjaxMultiUpload.Upload');

I think I have to use some lines like this
App::uses('AppController', 'Controller');

But I don't know exactly. Can you help me?

When using cake 2.5 with Auth Component

Hi,

The solution you provided in the Gotchas section doesn't work for the latest Cake 2.5. Users need to edit UploadsController.php and add the following instead:
public function beforeFilter() {
parent::beforeFilter();

            //need to disable Security component
            $this->Security->unlockedActions = array('upload');
    }

Cheers.

Upload button not showing

Hello,

Thanks for this free plugin. I have used in the past like two months ago and it works perfectly, but I just downloaded the new version today and the upload button is not showing. I had to revert back to the old one to get it working.

Thank you.

Change image size based on file directory and file type

Hi

Sorry if i ask a question again
Currently, I have 3 different uploads form
echo $this->Upload->edit('Recipe', "thumbs/" . $this->Form->fields['Recipe.id']);
echo $this->Upload->edit('Recipe', "highres/" . $this->Form->fields['Recipe.id']);
echo $this->Upload->edit('Recipe', "downloadable/" . $this->Form->fields['Recipe.id']);
Is there any way to change the image size based on the directories and file type?
Right now, the image size is based on the file type only so basically for PNG the image will be 250x200 and so on.
So for example, Image files (JPG, JPEG, PNG) on ../thumbs directory will be 275x200
Image files (JPG, JPEG, PNG) on ../highres directory will be 500x350 or something like that

Thanks in advance

Cleaner presentation of attached files (namely images)

(Sorry in advance if this is not the proper place to lob these type of questions - feel free to point me elsewhere.)

Any thoughts on how to "better" present attached files? That could mean either thumbnails of attached files, or what I'd really like is if it's an image file-type, when clicked, present the attachment in its own window (as opposed to letting the browser handle it as a download, or opening the image in a new tab which is not very user friendly).

I assume wrapping the img/a link with some Javascript or Ajax code would handle that, but I'm not entirely sure how to do that since the component seems to take care of making those links.

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.