snowfire / beautymail Goto Github PK
View Code? Open in Web Editor NEWSend beautiful HTML emails with Laravel
Send beautiful HTML emails with Laravel
Unable to pass {{ url() }}
through to the class.
tried installing this in laravel 5.1 and the asset:publish command is no longer available and when I tried to add the service provider it can not find the package.
Does this package supporting queuing?
In laravel 5.3 the mailer has changed, beautymail doesn't yet work with it.
As the title states I have all gems installed :
*** LOCAL GEMS ***
addressable (2.3.7)
bigdecimal (1.2.6)
bundler (1.7.12)
bundler-unload (1.0.2)
chunky_png (1.3.3)
compass (1.0.3)
compass-core (1.0.3)
compass-import-once (1.0.5)
css_parser (1.3.6)
executable-hooks (1.3.2)
ffi (1.9.6)
gem-wrappers (1.2.7)
getopt (1.4.2)
htmlentities (4.3.1)
io-console (0.4.3)
json (1.8.1)
mini_portile (0.6.2)
minitest (5.4.3)
multi_json (1.10.1)
nokogiri (1.6.6.2)
power_assert (0.2.2)
premailer (1.8.3)
psych (2.0.8)
rake (10.4.2)
rb-fsevent (0.9.4)
rb-inotify (0.9.5)
rdoc (4.2.0)
rubygems-bundler (1.4.4)
rvm (1.11.3.9)
sass (3.4.11)
test-unit (3.0.8)
However I am still getting "Premailer or getopt gems not installed" error when trying to do the simple test provided in your install instructions.
When the service provider Snowfire\Beautymail\BeautymailServiceProvider::class
is set in config/app.php
, running any artisan command will result in the following error if the app key has not been set yet.
PHP Fatal error: Uncaught RuntimeException: No supported encrypter found. The cipher and / or key length are invalid. in /var/www/laravel-wtg/vendor/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php:29
Stack trace:
#0 /var/www/laravel-wtg/vendor/laravel/framework/src/Illuminate/Container/Container.php(738): Illuminate\Encryption\EncryptionServiceProvider->Illuminate\Encryption\{closure}(Object(Illuminate\Foundation\Application), Array)
#1 /var/www/laravel-wtg/vendor/laravel/framework/src/Illuminate/Container/Container.php(631): Illuminate\Container\Container->build(Object(Closure), Array)
#2 /var/www/laravel-wtg/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(674): Illuminate\Container\Container->make('encrypter', Array)
#3 /var/www/laravel-wtg/vendor/laravel/framework/src/Illuminate/Container/Container.php(1167): Illuminate\Foundation\Application->make('encrypter')
#4 /var/www/laravel-wtg/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php(173): Illuminate\Container\C in /var/www/laravel-wtg/vendor/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php on line 29
After removing the service provider from the list, artisan started working again.
Laravel: 5.1
PHP: 7.0 and 7.1
I was looking into a way to make beautymail work on top of the mailables. This is what I was able to come up with. I would love to see people's thoughts on the matter
<?php
namespace App\Mail;
use Illuminate\Mail\Mailable;
use Illuminate\Container\Container;
use Illuminate\Contracts\Mail\Mailer as MailerContract;
use Snowfire\Beautymail\Beautymail;
class BeautyMailable extends Mailable
{
/**
* Send the message using the given mailer.
*
* @param \Illuminate\Contracts\Mail\Mailer $mailer
* @return void
*/
public function send(MailerContract $mailer)
{
Container::getInstance()->call([$this, 'build']);
$beautymail = app()->make(Beautymail::class);
$beautymail->send($this->buildView(), $this->buildViewData(), function ($message) {
$this->buildFrom($message)
->buildRecipients($message)
->buildSubject($message)
->buildAttachments($message)
->runCallbacks($message);
});
}
}
Hi guys,
When sending email with attachments (using regular attach() method):
Mail::send('emails.reminder', ['user' => $user], function ($m) use ($user) {
$m->to('[email protected]', 'Me')->subject('Your Files!');
$m->attach('/tmp/anyfile');
});
The letter looks good in desktop mail, but wrong in gmail (which relies on inline styles).
Then I've dug that you're applying cssinliner only for cases when email Content-type is "text/html" or "multipart/alternative". While in above example the resulting email has "multipart/mixed".
Are you ignoring it by intention? Let me know why. Otherwise, please consider merging my PR.
Thanks.
I know I could just create a blade template and extend it, but I would like to know how you would like us to extend and create templates. Since there is zero documentation on this subject.
Hi,
After some trial and error I managed to get Beautymail running on my Laravel 5.0.33 app, with the following change to the steps in your readme:
In config/app.php
, if I put
Snowfire\Beautymail\BeautymailServiceProvider::class,
it throws the error:
FatalErrorException in ProviderRepository.php line 150:
Class 'Snowfire\Beautymail\BeautymailServiceProvider::class' not found
The way it worked for me was to put (without ::class
)
'Snowfire\Beautymail\BeautymailServiceProvider',
Also, I think some configuration steps are missing from the readme:
In your own comment here you mention importing the class into the controller (and I think this is probably a better practice than having the code in routes.php
) but there is no indication as to the actual line of code. This also implies (to my knowledge of Laravel) creating an alias in config/app.php
which isn't covered at all. I inspected your package and tried creating aliases for either
'Beautymail' => 'Snowfire\Beautymail\BeautymailServiceProvider',
or
'Beautymail' => 'Snowfire\Beautymail\Beautymail',
then adding use Beautymail;
in my controller, but both cases return Undefined variable: beautymail
; So right now the only way I can use the class is via $beautymail = app()->make(\Snowfire\Beautymail\Beautymail::class);
(with the initial \
you mentioned in the linked comment).
What is the empty array passed here: $beautymail->send('emails.welcome', [], function($message)
? What can it contain and where do I write it?
If I try to send a mail with this package (or with the views provided actually) the mail content turns up empty. I have used the example from the readme.
Can we include a config property to not show the Footer?
How do I get data to the view from the controller?
my controller -
$order = $this->order;
$beautymail = app()->make(Beautymail::class);
$beautymail->send('mails.orderNotification', [], function($message)
{
$message
->from('[email protected]')
->to('[email protected]', 'Jon Due')
->subject('Welcome');
});
How can I pass the $order?
update for readme:
php artisan asset:publish --package="Snowfire/Beautymail"
=>
php artisan asset:publish "Snowfire/Beautymail"
Please how do i attach files while sending mails with snowfire?
Hi, i successfully installed the beauty mail in my laravel instance but I get this error..
here's my code
$beautymail = app()->make(Snowfire\Beautymail\Beautymail::class);
$beautymail->send('emails.booking-confirmation', $arData, function($m) use ($user) {
$m->to($user->email, $user->first_name . ' ' . $user->last_name);
$m->subject('Booking Confirmation from Wave House Sentosa');
});
Hi there,
It does seem that beatymail cannot be queues
therefore this method should be implemented in Beautymail.php
public function queue($view, array $data = [], $callback) {
$data = array_merge($this->settings, $data);
$this->mailer->queue($view, $data, $callback);
}
Could you do this for the next version?
Thanks for the great package.
Best regards
Simon
I installed as directed and created this route:
Route::get('email_beauty', function() {
$beautymail = app()->make(Snowfire\Beautymail\Beautymail::class);
$beautymail->send('emails.minty_test', [], function($message)
{
$message
->from('[email protected]')
->to('[email protected]', 'Jon Gravois')
->subject('Welcome!');
});
});
I added the minty_test view (direct copy of supplied code):
@extends('beautymail::templates.minty')
@section('content')
@include('beautymail::templates.minty.contentStart')
<tr>
<td class="title">
Welcome Steve
</td>
</tr>
<tr>
<td width="100%" height="10"></td>
</tr>
<tr>
<td class="paragraph">
This is a paragraph text
</td>
</tr>
<tr>
<td width="100%" height="25"></td>
</tr>
<tr>
<td class="title">
This is a heading
</td>
</tr>
<tr>
<td width="100%" height="10"></td>
</tr>
<tr>
<td class="paragraph">
More paragraph text.
</td>
</tr>
<tr>
<td width="100%" height="25"></td>
</tr>
<tr>
<td>
@include('beautymail::templates.minty.button', ['text' => 'Sign in', 'link' => '#'])
</td>
</tr>
<tr>
<td width="100%" height="25"></td>
</tr>
@include('beautymail::templates.minty.contentEnd')
@stop
and hit the route and got this:
ErrorException in Emogrifier.php line 723:
DOMXPath::query(): Invalid predicate
in Emogrifier.php line 723
at HandleExceptions->handleError('2', 'DOMXPath::query(): Invalid predicate', '/Users/jgravois/Documents/Code/AeroEco/aeroeco/vendor/pelago/emogrifier/Classes/Emogrifier.php', '723', array('xpath' => object(DOMXPath), 'cssSelector' => 'a[href^="sms"]'))
at DOMXPath->query('//a[href^="sms"]') in Emogrifier.php line 723
at Emogrifier->existsMatchForCssSelector(object(DOMXPath), 'a[href^="sms"]') in Emogrifier.php line 683
at Emogrifier->copyCssWithMediaToStyleNode(object(DOMDocument), object(DOMXPath), '@media only screen and (max-width: 640px) { a[href^="tel"], a[href^="sms"] { text-decoration: none; color: #ffffff; pointer-events: none; cursor: default; } .mobile_link a[href^="tel"], .mobile_link a[href^="sms"] { text-decoration: default; color: #ffffff !important; pointer-events: auto; cursor: default; } table[class=devicewidth] {width: 440px!important;text-align:center!important;} table[class=devicewidthinner] {width: 420px!important;text-align:center!important;} table[class="sthide"]{display: none!important;} img[class="bigimage"]{width: 420px!important;height:219px!important;} img[class="col2img"]{width: 420px!important;height:258px!important;} img[class="image-banner"]{width: 440px!important;height:106px!important;} td[class="menu"]{text-align:center !important; padding: 0 0 10px 0 !important;} td[class="logo"]{padding:10px 0 5px 0!important;margin: 0 auto !important;} img[class="logo"]{padding:0!important;margin: 0 auto !important;} }@media only screen and (max-width: 480px) { a[href^="tel"], a[href^="sms"] { text-decoration: none; color: #ffffff; pointer-events: none; cursor: default; } .mobile_link a[href^="tel"], .mobile_link a[href^="sms"] { text-decoration: default; color: #ffffff !important; pointer-events: auto; cursor: default; } table[class=devicewidth] {width: 280px!important;text-align:center!important;} table[class=devicewidthinner] {width: 260px!important;text-align:center!important;} table[class="sthide"]{display: none!important;} img[class="bigimage"]{width: 260px!important;height:136px!important;} img[class="col2img"]{width: 260px!important;height:160px!important;} img[class="image-banner"]{width: 280px!important;height:68px!important;} }') in Emogrifier.php line 329
at Emogrifier->process(object(DOMDocument)) in Emogrifier.php line 217
at Emogrifier->emogrify() in CssInlinerPlugin.php line 31
at CssInlinerPlugin->beforeSendPerformed(object(Swift_Events_SendEvent)) in Transport.php line 66
at Transport->beforeSendPerformed(object(Swift_Message)) in MandrillTransport.php line 42
at MandrillTransport->send(object(Swift_Message), array()) in Mailer.php line 85
at Swift_Mailer->send(object(Swift_Message), array()) in Mailer.php line 395
at Mailer->sendSwiftMessage(object(Swift_Message)) in Mailer.php line 181
at Mailer->send('emails.minty_test', array('senderName' => null, 'reminder' => null, 'unsubscribe' => null, 'address' => null, 'logo' => array('path' => 'http://www.eco.local/vendor/Beautymail/assets/images/sunny/logo.png', 'width' => '', 'height' => ''), 'twitter' => null, 'facebook' => null, 'flickr' => null, 'css' => false, 'message' => object(Message)), object(Closure)) in Beautymail.php line 58
at Beautymail->send('emails.minty_test', array('senderName' => null, 'reminder' => null, 'unsubscribe' => null, 'address' => null, 'logo' => array('path' => 'http://www.eco.local/vendor/Beautymail/assets/images/sunny/logo.png', 'width' => '', 'height' => ''), 'twitter' => null, 'facebook' => null, 'flickr' => null, 'css' => false), object(Closure)) in routes.php line 271
at RouteServiceProvider->{closure}()
at call_user_func_array(object(Closure), array()) in Route.php line 155
at Route->runCallable(object(Request)) in Route.php line 130
at Route->run(object(Request)) in Router.php line 708
at Router->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Router.php line 710
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 673
at Router->dispatchToRoute(object(Request)) in Router.php line 635
at Router->dispatch(object(Request)) in Kernel.php line 236
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 62
at StartSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 59
at EncryptCookies->handle(object(Request), object(Closure))
at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Kernel.php line 122
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 87
at Kernel->handle(object(Request)) in index.php line 13
'css' section of the published config file is ignored. This is due to the fact you are passing beautymail.view as parameter of Beautymail service constructor :)
Hi,
I followed the steps but I didn't get installed.
Thank you very much for your help.
Hi guys,
Why is there anything called CssInlinerPlugin? Seems it removes completely all tags that has class="mobile_only" from HTML, right before sending email. It probably strips everything else that have "display: none" (which is not under @media level).
After that this rules is never triggered:
https://github.com/Snowfire/Beautymail/blob/master/src/styles/css/ark.css#L63-L66
https://github.com/Snowfire/Beautymail/blob/master/src/styles/css/sunny.css#L63-L66
As there are just no any elements left to apply it to.
I've started using this component yesterday and spend 2 happy hours investigating this issue, and I now have a serious question. Does it work for you really?
{ "message": "Class Snowfire\Beautymail\Beautymail contains 2 abstract methods and must therefore be declared abstract or implement the remaining methods (Illuminate\Contracts\Mail\Mailer::to, Illuminate\Contracts\Mail\Mailer::bcc)", "file": "C:\xampp\htdocs\admin\vendor\snowfire\beautymail\src\Snowfire\Beautymail\Beautymail.php", "line": 7, "trace": [] }
How to render a collection of data in the template?
I have added in provider array but getting error ReflectionException in Container.php line 736:
Class App\Http\Controllers\Snowfire\Beautymail\Beautymail does not exist
I can't figure out why this is happening.
If I install pelago/emogrifier dev-master manually then it installs the latest dev-master commit
but when I install the snowfire/beautymail dev-master, even though ti has a dependency on pelago/emogrifier @dev, in my installation it doesn't get the latest version which leads to an error because the latest version it does get (1.2.0) is not compatible with PHP 7.2
Not sure if I am being extremely silly or not, but been a tiring couple of days.
Similar issue as here: #3
I have done:
composer require snowfire/beautymail dev-master
Added Snowfire\Beautymail\BeautymailServiceProvider::class, to providers in config/app.php
And attempted:
php artisan vendor:publish --provider="Snowfire\Beautymail\BeautymailServiceProvider"
Which results in:
[Symfony\Component\Debug\Exception\FatalThrowableError]
Class 'Snowfire\Beautymail\BeautymailServiceProvider' not found
I tried composer update, which results in:
[Symfony\Component\Debug\Exception\FatalThrowableError]
Class 'Snowfire\Beautymail\BeautymailServiceProvider' not found
Script php artisan optimize handling the post-update-cmd event returned with error code 1
It is not a new project I am working on, and it is entirely possible someone already installed this before, as there is a beautymail.php in the config folder.
However still not sure why I am then getting composer update errors still. Any feedback appreciated.
Hi,
I found that logo's width and height isn't implemented on minty template, therefore changing width and height on beautymail config won't affect anything. I've done this code on my local and it seems fine.
<img src="{{ $logo['path'] }}" width="{{ $logo['width'] }}" height="{{ $logo['height'] }}" alt="logo" border="0" style="display:block; border:none; outline:none; text-decoration:none;" st-image="edit" class="logo">
on file : Beautymail/src/views/templates/minty.blade.php
Hello I am trying to push data into the subject of $message however i keep getting that this variable doesn't exist and i cant work out how to fix it.
Here is a look at my function:
$name = (DB::table('base_projects_databases')->select('name')->where('id','=', $request->projectID)->get())[0]->name;
$beautymail = app()->make(\Snowfire\Beautymail\Beautymail::class);
$beautymail->send('emails.newIssue', ["project" => $name], function($message)
{
$message
->from('[email protected]')
->to('[email protected]', 'Dan Marks')
->subject('New Issue Created For: ' . $project);
});
I would like to make the logo clickable to a custom link (my website...)
I didn't see any configuration for that, is there a way to do it?
Hi,
when I try to send a smple minty template using your example, or any other template as well, I receive the following error:
BadMethodCallException in Emogrifier.php line 196:
Please set some HTML first before calling emogrify.
Colud you lend me some helping hands? :)
PS.: The template has HTML tags :)
I just upgraded laravel from 5.4 to 5.5.3 but when I run php artisan SendNotification:notifications on command line I got this.
PHP Fatal error: Class Snowfire\Beautymail\Beautymail contains 2 abstract methods and must th
erefore be declared abstract or implement the remaining methods (Illuminate\Contracts\Mail\Mai
ler::to, Illuminate\Contracts\Mail\Mailer::bcc) in C:\laragon\www\liz\vendor\snowfire\beautyma
il\src\Snowfire\Beautymail\Beautymail.php on line 7
I am making notification in the background process, and you package break on 5.5.3 Laravel version,
it's working on laravel 5.4
I am continuously getting the error from BeautyMailServiceProvider.php that 'Skipped Registering the SwiftMailer plugin: CssInlinerPlugin. I have no idea why and i've tried multiple approaches to get rid of it. Any ideas?
Hi,
I am unable to send an email using $beautymail->send()
, I don't get any error as well.
Below are my steps that I followed:
Install: composer require snowfire/beautymail dev-master
Update config/app.php
with Snowfire\Beautymail\BeautymailServiceProvider::class,
Ran this command: php artisan vendor:publish --provider="Snowfire\Beautymail\BeautymailServiceProvider"
Added the code to routes.php
:
Route::get('/mail', function()
{
$beautymail = app()->make(\Snowfire\Beautymail\Beautymail::class);
$beautymail->send('emails.welcome', [], function($message)
{
$message
->to('xxx@xxxcom', 'Zeshan Khattak')
->subject('Welcome!');
});
});
Created resources/views/emails/welcome.blade.php
and placed the following code.
@extends('beautymail::templates.minty')
@section('content')
@include('beautymail::templates.minty.contentStart')
<tr>
<td class="title">
Welcome Steve
</td>
</tr>
<tr>
<td width="100%" height="10"></td>
</tr>
<tr>
<td class="paragraph">
This is a paragraph text
</td>
</tr>
<tr>
<td width="100%" height="25"></td>
</tr>
<tr>
<td class="title">
This is a heading
</td>
</tr>
<tr>
<td width="100%" height="10"></td>
</tr>
<tr>
<td class="paragraph">
More paragraph text.
</td>
</tr>
<tr>
<td width="100%" height="25"></td>
</tr>
<tr>
<td>
@include('beautymail::templates.minty.button', ['text' => 'Sign in', 'link' => '#'])
</td>
</tr>
<tr>
<td width="100%" height="25"></td>
</tr>
@include('beautymail::templates.minty.contentEnd')
@stop
When I try hit http://0.0.0.0:8000/mail
, it shows a blank page :( .
But when I run below script, it works
\Mail::send([], [], function ($message)
{
$message
->to('xxx@xxxcom', 'Zeshan Khattak')
->subject('Welcome!');
});
I am not really sure what I'm doing wrong.
Hi! I'd like to use the minty template, but can't seem to change the logo without changing the contents of the vendor directory. Of course, changing the vendor directory isn't something I want to do as that would break future updates of Beautymail.
What would you suggest? Thanks a lot.
Joris
I get the following error:
[Symfony\Component\Debug\Exception\FatalErrorException]
Class Snowfire\Beautymail\Beautymail contains 2 abstract methods and must therefore be declared abstract or implement the remaining methods (Illuminate\Contracts\Mail\Mailer::to, Illuminate\Contracts\Mail\Mailer::bcc)
Could you please bring an update for the latest laravel version?
For laravel 5.0 , i just updated composer , and this error is occurring
ErrorException in Beautymail.php line 58:
Undefined index: path
Run composer updated
and edit your app.php and add a new Service Provider:
to
Run composer update
and edit your app.php and add a new Service Provider:
Emogrifier 2.0.0 has been released, fixing a lot of bugs. If the new PHP >= 5.5 requirement is not a problem, the dependency should be updated to ^2.0.0. This also provides compatibility with PHP 7.2.
Please, how do i add a variable into the mail template?
I can't send links (for unsuscription) with the widgets template. Maybe it would be a good idea to disable the escaping there.
Hello thanks for the great work.
How do I display the email template in a view instead of sending it?
Hi
I am getting following error message. How do I fix?
Undefined variable: logo
\vendor\snowfire\beautymail\src\views\templates\minty.blade.php
No matter what I did, I couldn't get the Minty template to respect the colors I was putting in the config/beautymail.php file. After looking in the minty.blade.php template file in the vendor src folder, I see it's pulling the values from Config::get('beautymail**::templates**.color.highlight'), which is null when I try to print it out. Changing this to Config::get('beautymail.color.highlight') fixed it for me, but I do not know if this is the proper way to fix it (I doubt it). Anyone else experiencing this?
Can we have unescaped data in the Address field in the Widgets template? If you want to break a line between parts of an address, you cannot, as far as I know.
If you use Beautymail in a queued job, Request::getSchemeAndHttpHost() returns http://localhost by default, which means all images will be broken.
See this for reference: http://stackoverflow.com/questions/28373730/getting-route-url-from-queue-returns-wrong-base
Perhaps instead of relying on Request::getSchemeAndHttpHost(), we could use an injected view variable that either uses the Request or defaults to Config::get('app.url') when it's running as a Job?
Any chance support for Lumen could be added?
Presently, running the vendor:publish
command results in the following fatal exception:
[Symfony\Component\Debug\Exception\FatalErrorException]
Call to undefined functionSnowfire\Beautymail\config_path()
invendor\snowfire\beautymail\src\Snowfire\Beautymail\BeautymailServiceProvider.php
on line 24
I have default installation. but there is not showing logo and social media logo..
and working by default only 'widgets' template, other giving me error logo not found...
Any idea what is wrong? Using laravel 5.2
I couldn't get composer to install beautymail. I have a Laravel 5 installation.
Only emil/inlier [dev-master] has support for Laravel 5, but snowfire/beautymail [dev-master] requires emil/inliner [1.*] which doesn't work for Laravel 5.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.