Git Product home page Git Product logo

yii2-file-upload-widget's Introduction

BlueImp File Upload Widget for Yii2

Latest Version Software License Build Status Coverage Status Quality Score Total Downloads

Renders a BlueImp jQuery File Upload plugin. That plugin integrates multiple file selection, drag&drop support, progress bars, validation and preview of images.

Installation

The preferred way to install this extension is through composer.

Either run

$ composer require 2amigos/yii2-file-upload-widget:~1.0

or add

"2amigos/yii2-file-upload-widget": "~1.0"

to the require section of your composer.json file.

Usage

The widget comes with two flavors:

<?php
use dosamigos\fileupload\FileUpload;

// without UI
?>

<?= FileUpload::widget([
    'model' => $model,
    'attribute' => 'image',
    'url' => ['media/upload', 'id' => $model->id], // your url, this is just for demo purposes,
    'options' => ['accept' => 'image/*'],
    'clientOptions' => [
        'maxFileSize' => 2000000
    ],
    // Also, you can specify jQuery-File-Upload events
    // see: https://github.com/blueimp/jQuery-File-Upload/wiki/Options#processing-callback-options
    'clientEvents' => [
        'fileuploaddone' => 'function(e, data) {
                                console.log(e);
                                console.log(data);
                            }',
        'fileuploadfail' => 'function(e, data) {
                                console.log(e);
                                console.log(data);
                            }',
    ],
]); ?>

<?php
use dosamigos\fileupload\FileUploadUI;

// with UI
?>
<?= FileUploadUI::widget([
    'model' => $model,
    'attribute' => 'image',
    'url' => ['media/upload', 'id' => $tour_id],
    'gallery' => false,
    'fieldOptions' => [
        'accept' => 'image/*'
    ],
    'clientOptions' => [
        'maxFileSize' => 2000000
    ],
    // ...
    'clientEvents' => [
        'fileuploaddone' => 'function(e, data) {
                                console.log(e);
                                console.log(data);
                            }',
        'fileuploadfail' => 'function(e, data) {
                                console.log(e);
                                console.log(data);
                            }',
    ],
]); ?>

<?php

// action examples

public function actionImageUpload()
{
    $model = new WhateverYourModel();

    $imageFile = UploadedFile::getInstance($model, 'image');

    $directory = Yii::getAlias('@frontend/web/img/temp') . DIRECTORY_SEPARATOR . Yii::$app->session->id . DIRECTORY_SEPARATOR;
    if (!is_dir($directory)) {
        FileHelper::createDirectory($directory);
    }

    if ($imageFile) {
        $uid = uniqid(time(), true);
        $fileName = $uid . '.' . $imageFile->extension;
        $filePath = $directory . $fileName;
        if ($imageFile->saveAs($filePath)) {
            $path = '/img/temp/' . Yii::$app->session->id . DIRECTORY_SEPARATOR . $fileName;
            return Json::encode([
                'files' => [
                    [
                        'name' => $fileName,
                        'size' => $imageFile->size,
                        'url' => $path,
                        'thumbnailUrl' => $path,
                        'deleteUrl' => 'image-delete?name=' . $fileName,
                        'deleteType' => 'POST',
                    ],
                ],
            ]);
        }
    }

    return '';
}

public function actionImageDelete($name)
{
    $directory = Yii::getAlias('@frontend/web/img/temp') . DIRECTORY_SEPARATOR . Yii::$app->session->id;
    if (is_file($directory . DIRECTORY_SEPARATOR . $name)) {
        unlink($directory . DIRECTORY_SEPARATOR . $name);
    }

    $files = FileHelper::findFiles($directory);
    $output = [];
    foreach ($files as $file) {
        $fileName = basename($file);
        $path = '/img/temp/' . Yii::$app->session->id . DIRECTORY_SEPARATOR . $fileName;
        $output['files'][] = [
            'name' => $fileName,
            'size' => filesize($file),
            'url' => $path,
            'thumbnailUrl' => $path,
            'deleteUrl' => 'image-delete?name=' . $fileName,
            'deleteType' => 'POST',
        ];
    }
    return Json::encode($output);
}

Please, check the jQuery File Upload documentation for further information about its configuration options.

Using the Actions

TODO

Testing

$ ./vendor/bin/phpunit

Contributing

Please see CONTRIBUTING for details.

Credits

License

The BSD License (BSD). Please see License File for more information.


web development has never been so fun
www.2amigos.us

yii2-file-upload-widget's People

Contributors

aigor4ever avatar airani avatar amigo-tabin avatar arnaud-g1 avatar bitanetanel avatar creocoder avatar dennybiasiolli avatar dmvslv avatar evgeniyrru avatar faenir avatar hamrak avatar iliyanz avatar karataserkan avatar laureckis avatar leandrogehlen avatar machour avatar marqu3s avatar max-wen avatar metalguardian avatar mysterydragon avatar n1ce-tm avatar olekhy avatar ramoscarlos avatar re8us avatar schoradt avatar skeeks-semenov avatar spapad avatar tonydspaniard avatar toschqlb avatar usanjar 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

yii2-file-upload-widget's Issues

acceptFileTypes return error in FileUploadUI

Hi. The widget works properly in all its functions but if I try to set the "acceptFileTypes" parameter in this way

'acceptFileTypes' => '/(.|/)(gif|jpe?g|png)$/i',

I receive this javascript error

TypeError: options.acceptFileTypes.test is not a function

in the browser's console.

If I'm not mistaken the test() method tests for a match in a string.
It seems that the regex is not valid.

Can you help me please?

I hope I'm making myself clear.
Thank you.

PS. I tried to validate the files in other way (through the "add" event) with success but I would know why the parameter doesn't work as described in the documentation (https://github.com/blueimp/jQuery-File-Upload/wiki/Options).

Delete functionality

Hi,
when upload done then delete button is showing by writting this lines:
'deleteUrl' => Url::to(['deletefile','id'=>$image->name]),
'deleteType' => 'POST',
in controller action i create deletefile action like that:
public function actionDeletefile($id){
unlink(Yii::$app->basePath. '/web/uploads/'.$id);
}
this method delete successfully from folder but delete button is still showing there how i remove it also. plz suggest me!

How could i change a form view?

The view is lying here vendor\2amigos\yii2-file-upload-widget\src\views\form.php
I can't modify files in vendor directory, but I need to modify this view. How could I do that?

validation not working

using in yii2 active form the validation for file is not working please provide me any suggestions

No thumbnail variable in custom view file

Hello.
When i using custom view file, there is no $thumbnail. Probably, because missing line:

$params['thumbnail'] = $this->thumbnail;

in:

case static::STYLE_CUSTOM:
                if($this->customView === null) {
                    throw new InvalidConfigException(
                        '"FileInput::$customView" must be set if "FileInput::STYLE_CUSTOM" is used'
                    );
                }
                $view = $this->customView;
                break;

Right way to change template

Hi!
It's good widget, thanks for it!

I want little change template. I changed file vendor/2amigos/yii2-file-upload-widget/src/views/download.php but wory about composer update, my changes can be lost? Is there better way to change template?

model with other fields and multiple images

How to use it with a News model with news title and description and multiple images.News title and description will save to news table and related multiple images will save to news_images table
?

Possiblitity to disable rendering the button on FileUpload

In your last version you change the function run in FileUpload.php now the Upload Button is added automatically, please create a configuration to disable or enable it.

In some situations we want to create our own buttons in a different location. It's a quick to fix this.

/**
     * @inheritdoc
     */
    public function run()
    {
        $input = $this->hasModel()
            ? Html::activeFileInput($this->model, $this->attribute, $this->options)
            : Html::fileInput($this->name, $this->value, $this->options);

        echo $this->render('uploadButton', ['input' => $input]);

        $this->registerClientScript();
    }

Thank you and keep de good work

Load previously uploaded images

Is it possible?

I mean. Every time I reload the page all the uploaded images are gone and I can't know what I've uploaded already. I'm looking for something like this so I can also delete older images. I've been playing with 'gallery' => true but with the lack of documentation I'm not sure how this works.

Basic Uploader

The basic uploader only displays an ordinary file input, rather than the nice upload button.

Error Messge from Model

How can i show the Error message from my model?

I have an model that save the path string from the file and that model don´t show the errors.

Form save

Hello! How to save form data with uploaded images list? I try to use hidden fields, but I think it's wrong way.

ver 1.0.4 Error

verison 1.0.4 gives an error message Error: cannot call methods on fileupload prior to initialization; attempted to call method 'option'
ver. 1.0.1 - ok

Another issue with fileUpload

Little fix needed:
Line 81:

$js[] = "jQuery(#$id).on('$event', $handler);";

Please change to:
$js[] = "jQuery('#$id').on('$event', $handler);";

Thank you, great extension!

docs for controller and model

Please add some documentation for model and controller code so that it can easily be understood by a newbie thanks

file upload more info

Hi i'm tryng fileupload widgets,
So i create a basic form without the widget, it work and uload the file.

Now i add the code in the view for widget...
so it not work it sai "file Not found" when i try to upload data.

So if i add the code inside activeform it work as standard yii2 form without loading...

this is the code.

<?php

use yii\helpers\Html;
use dosamigos\fileupload\FileUploadUI;
use yii\widgets\ActiveForm;

/* @var $this yii\web\View */
/* @var $searchModel app\modules\Lists\models\DataListsSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */



$this->title                   = 'Import Dati';
$this->params['breadcrumbs'][] = $this->title;
?>

<div class="data-lists-index">

    <div class="page-header">
        <h1><?= Html::encode($this->title) ?>
            <small>Importa dati da file</small>
        </h1>
    </div>

<!--
    <p>
        <?= Html::a('Inserisci un Utente alla lista', ['create'], ['class' => 'btn btn-success']) ?>
        <?= Html::a('Crea nuova lista', ['tipolista/create'], ['class' => 'btn btn-success']) ?>
    </p>

    <br/>
!-->

<?php  //$form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>

    <?php
echo  FileUploadUI::widget([
        'model' => $model,
        'attribute' => 'filedata',
        'url' => ['upload', 'id' => 'test'],
        'gallery' => false,
        'fieldOptions' => [
            'accept' => 'excel/*'
        ],
        'clientOptions' => [
            'maxFileSize' => 2000000
        ]
    ]);

    ?>


<?php //ActiveForm::end(); ?>

<?php
/*
    $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>

    <?= $form->field($model, 'filedata')->fileInput() ?>

    <button>Submit</button>

    <?php ActiveForm::end(); ?>
*/
?>

</div>

can you help me

load-image.min.js not found

This file does not exist in vendor/bower/blueimp-load-image/js.

I am using yii2-file-upload-widget last release 1.0.1

upload files - google chrome_007

Preview images

Using the FileUploadUI I can't get the preview image, after I add a file.

How to see the images that will be uploaded?

This problem only occur if I use the widget inside a form.I think its related with the form id

Doesn't work in ActiveForm widget

the widget renders all buttons and the browse button functions, however the gallery doesn't populate when you select a file.

<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;
use dosamigos\fileupload\FileUploadUI;

/* @var $this yii\web\View */
/* @var $model app\models\VoteItem */
/* @var $form yii\widgets\ActiveForm */
?>

<div class="vote-item-form">

    <?php $form = ActiveForm::begin(); ?>

    <?= Html::activeHiddenInput($model, 'vid')?>

    <?= $form->field($model, 'title')->textInput(['maxlength' => 255]) ?>

    <?= FileUploadUI::widget([
        'model' => $model,
        'attribute' => 'litpic',
        'url' => ['media/upload', 'id' => $model->id],
        'gallery' => true,
        'fieldOptions' => [
                'accept' => 'image/*'
        ],
        'clientOptions' => [
                'maxFileSize' => 2000000
        ],
        // ... 
        'clientEvents' => [
                'fileuploaddone' => 'function(e, data) {
                                        console.log(e);
                                        console.log(data);
                                    }',
                'fileuploadfail' => 'function(e, data) {
                                        console.log(e);
                                        console.log(data);
                                    }',
        ],
    ]);
    ?>

    <?= $form->field($model, 'desc')->textInput(['maxlength' => 255]) ?>

    <div class="form-group">
        <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
    </div>

    <?php ActiveForm::end(); ?>

</div>

Uploaded successfully but does not appear to be photos

Hi!
When pressing start, the image is saved on server, but when uploaded successfully it does not show up image. error SyntaxError: Unexpected token <.
I think not find the link that contains the image. Please help for me to edit the link contains photos

Upload other file types as .zip , .rar

Hi,
I have used the widget upload image files successfully.
But I can not upload .zip, .rar files.
So, How must i config the widget to handle this ?
Thanks.

Image attribute in post returns empty

Using the super basic version, the upload of the file happens and all is good. However when trying to save the model to which the widget is attached, in this case its called Item the image attribute always returns empty. I would expect that the hidden field value would be populated with the image name after the upload is successful, but the value is empty. Am I missing something?

Widget:

<?= FileUpload::widget( [
    'model'         => $model,
    'attribute'     => 'image',
    'url'           => [ 'media/upload', 'id' => $model->item_id ],
    'options'       => [ 'accept' => 'image/*' ],
    'clientOptions' => [
        'maxFileSize' => 2000000,
        'multiple' => false,
        'maxNumberOfFiles' => 1,
    ]
 ] ); ?>

don't show preview

my code

$model, 'attribute' => 'creative_images', 'url' => ['media/upload'], 'gallery' => false, 'fieldOptions' => [ 'accept' => 'image/*' ], 'clientOptions' => [ 'maxFileSize' => 2000000 ], // ... 'clientEvents' => [ 'fileuploaddone' => 'function(e, data) { console.log(e); console.log(data); }', 'fileuploadfail' => 'function(e, data) { console.log(e); console.log(data); }', ], ]); ?>

but when i add file. nothing image show preview.

Thanks alot

So basic!

It's so basic, No validation...
not prefer for using in production mode.

new release

Hello! First of all thank you!

I installed your widget by composer
php composer.phar require "2amigos/yii2-file-upload-widget" "*"

but it loads 0.1.1 version with big mistake in FileUploadUI.php – missing quotes in client scripts section.

How can I get latest stable version with no mistakes?

I tried config composer.json like this:
"minimum-stability": "dev"
"2amigos/yii2-file-upload-widget": "*"
"2amigos/yii2-file-upload-widget": "master"
"2amigos/yii2-file-upload-widget": "master-dev"

it cause only error: The package is not available in a stable-enough version according to your minimum-stability setting.

Hidden field

This widget is creating an input of type=hidden, but it seems a little unnecessary and its causing me some confusion of its purpose.

Wouldn't the input with the type=file enough? I mean... none of the demos of the blueimp have the type=hidden input.

Cheers.

Asset source path

Hello

in asset bundles full source path folder will be copied to the web/assets

class FileUploadAsset extends AssetBundle
{
    public $sourcePath = '@bower';
}

in this case all my 20+ bower packages will be copied 3 times (one for each asset bundle)

can you change this behavior?

Doesn't work in a Modal

I am loading a form into a modal via AJAX and the widget renders all buttons and the browse button functions, however the gallery doesn't populate when you select a file.

Any help?

SyntaxError: Unexpected end of input

I have tried to complete the setup with no success.
I keep getting Error SyntaxError: Unexpected end of input.
Is there a workaround, or is there something I am missing?

Assets

I have a change directory for assets which is web-assets but when this plugin renders it renders the assets/javascript_folder/javascript_file.js

but actually what it should do web-assets/javascript_folder_javascript_file.js

Which is why it's giving me error of "Uncaught TypeError: undefined is not a function"
Any work around for this ?

Progress callback

Looks like fileuploadprogress() function doesn't works properly in the 'basic' widget. It works fine in the UI widget only.

Example:

'fileuploadprogressall' => 'function(e, data) {
    console.log(parseInt(data.loaded / data.total * 100, 10));
}',

Console return value '100' once right after uploading started.

Yii::$app->request->post() is empty

Hi,

A couple of days ago I updated the yii2-file-upload-widget extension. Before that time, everything worked fine. Since the update, I get an error when updating files.

Widget:

<?= FileUploadUI::widget([
        'model' => $model,
        'attribute' => 'file',
        'url' => ['file/upload'],
        'gallery' => false,
        'fieldOptions' => [
                'accept' => 'image/*'
        ],
        'clientOptions' => [
                'maxFileSize' => 2000000
        ],
        'clientEvents' => [
            'fileuploaddone' => 'function(e, data) {
                console.log(e);
                console.log(data);
            }',
            'fileuploadfail' => 'function(e, data) {
                console.log(e);
                console.log(data);
            }',
        ],
    ]);
?>

Controller:

public function actionUpload()
{
    Yii::$app->response->getHeaders()->set('Vary', 'Accept');
    Yii::$app->response->format = Response::FORMAT_JSON;

    $model = new UploadFile;

    $post = Yii::$app->request->post();
    if ($model->load($post)) {
        // get the uploaded file instance. for multiple file uploads
        // the following data will return an array
        $file = UploadedFile::getInstance($model, 'file');
        ...

The $post variable above is an empty array, so that the if statement is never entered. When I use $post = $_FILES; instead of $post = Yii::$app->request->post();, everything works just fine. Why is the post request variable an empty array? What am I doing wrong here?

Thanks!

UploadHandler

have forked and developed implementation of this using the UploadHandler.php provided by Blueimp - working fine but coupled to my system for the moment.

It may be useful to others and if you think so then would love to develop it further (have used yii wheels in the past etc as well as many other awesome extension of course and would be good to offer something back) - with your input - hopefully to become part of your extension as opposed to a complete separate extension. I think a lot easier if only one blueimp file upload extension for yii2 rather than several to try and figure out which one suits them.

I don't have experience however creating useful extensions for other peoples use..

Use case:
I have needed to allow the upload of files on a per model/ActiveRecord basis, e.g. a material may have 0-n drawings. Used XUpload in yii 1 - still had to customise it a lot though.

Basically want to fill in form data and select files for submission at the same time. Would expect this to be typical.

The trickiness of submitting other inputs in the form as well as the files seems to be that jquery-file-upload does a great job with files, and yii does a great a great job with the other form inputs.

Created FileUploadUIAR (for now), altered templates to hide the individual file submit inputs and only allow the button bar start submit (renamed as save). Because this doesn't allow submit unless files are selected, set click handler for the button to call yiiActiveForm click handler to submit form and deal with errors etc when no files selected. Gets a bit trickier when files are selected:
submit thru jquery file upload (i.e. let its click handler submit) to actionUpload

actionUpload:
merge model validation response with blueimps UploadHandler.php into a single json response.
back on client:
use callback to process the response and send the relevant json data to jquery-file-upload and the form validataion errors to yiiactiveform
reset the file upload inputs to un-uploaded state (those that didn't error anyway) if any errors in uploading or validating/saving model.

The only problem struck was as described by http://www.yiiframework.com/forum/index.php/topic/57776-want-to-call-updateinputs-from-yiiactiveform/ which I haven't yet had any response on - i.e. it is working but hacked yii.ActiveForm.js

Next plan is to allow add files on a per attribute basis (0..n) instead of just a per model basis.

Incidentally, personally I store the files 'basically' under uploads/ModelName/primaryKeyValue/* as opposed to storing the path in the database which has been a maintenance problem in the past. Will store attribute related files under uploads/ModelName/primaryKeyValue/attribute/*. I say 'basically' asmy models form a tree structure which means rm -rf fired by exec in afterDelete event of the model will remove all child files (since can't execute system commands from after delete trigger in MySql) - but this is probably more complex than anyone else would be interested.

Unable to verify your data submission

I have such a problem for a long time, it appears suddenly as disappears.
better I could do it turn to false enableCsrfValidation in controller beforeAction.
I tried to add clientOption 'formData' => ['_csrf'=>new JsExpression('yii.getCsrfToken()')] also unpredictable.
seems it global Ajax app issue, but I have checked everything many times..

i have a question?

How can i do this?
1.I have a form with fields: sender, reciver, message, attachment.
2.How can i submit this form with attachment like email does.

Stray character

There is a stray semicolon somewhere in this. When viewing page source the uploader shows this:

;jQuery('#w0').fileupload({"maxFileSize":2000000,"url":"/index.php?r=compressor-defect%2Fupload&id=30"});

Notice the semicolon at the beginning of the line?

This causes both the uploader and following Javascript to fail.

Yii::t shouldn't use 'app' as message category

This construction in src/views/uploadButton.phpuploadButton.php
<span><?= Yii::t('app', 'Select file...') ?></span>
generates exception every time when FileUpload::run() execute if there is no the 'app' message category.

Probably, 'fileupload' message category is more suitable in this case.

composer require error

Your requirements could not be resolved to an installable set of packages.
[371.4MB/1218.42s]
Problem 1
- Installation request for trntv/yii2-aceeditor ^2.0 -> satisfiable by trntv/yii2-aceeditor[2.0.0].
- trntv/yii2-aceeditor 2.0.0 requires bower-asset/ace-builds ~1.1.8 -> no matching package found.
Problem 2
- Installation request for trntv/yii2-bootstrap-datetimepicker ^1.5 -> satisfiable by trntv/yii2-bootstrap-datetimepicker[1.5.0].
- trntv/yii2-bootstrap-datetimepicker 1.5.0 requires bower-asset/eonasdan-bootstrap-datetimepicker ~4.7 -> no matching package found.
Problem 3
- 2amigos/yii2-file-upload-widget 1.0.x-dev requires bower-asset/blueimp-file-upload ~9.9.0 -> no matching package found.
- 2amigos/yii2-file-upload-widget 1.0.2 requires bower-asset/blueimp-file-upload ~9.9.0 -> no matching package found.
- Conclusion: don't install bower-asset/blueimp-file-upload 9.7.2
- Conclusion: don't install 2amigos/yii2-file-upload-widget 1.0.1
- Installation request for 2amigos/yii2-file-upload-widget ~1.0 -> satisfiable by 2amigos/yii2-file-upload-widget[1.0.0, 1.0.1, 1.0.2, 1.0.x-dev].
- Can only install one of: bower-asset/blueimp-file-upload[9.11.2, 9.7.1].
- Can only install one of: bower-asset/blueimp-file-upload[9.11.2, 9.7.0].
- 2amigos/yii2-file-upload-widget 1.0.0 requires bower-asset/blueimp-file-upload ~9.9 -> satisfiable by bower-asset/blueimp-file-upload[9.11.2, 9.11.2].
- Conclusion: don't install bower-asset/blueimp-file-upload 9.11.2
- Installation request for bower-asset/blueimp-file-upload ~9.7.0 -> satisfiable by bower-asset/blueimp-file-upload[9.7.2, 9.7.1, 9.7.0].

Potential causes:

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.