Coder Social home page Coder Social logo

friendsofflarum / subscribed Goto Github PK

View Code? Open in Web Editor NEW
12.0 2.0 9.0 669 KB

Better user subscriptions for your Flarum forum

Home Page: https://discuss.flarum.org/d/6460

License: MIT License

PHP 73.77% JavaScript 9.41% Blade 5.39% TypeScript 11.42%
flarum subscription flarum-extension notifications fof friendsofflarum hacktoberfest discussion approval

subscribed's Introduction

Subscribed by FriendsOfFlarum

License Latest Stable Version OpenCollective

A Flarum extension. Adds additional subscriptions to specific events.

Available Notifications (User Settings)

  • Someone creates a discussion
  • Someone authors a new post
  • When someone registers
  • A created post needs approval

Available Events

  • New Discussion
    • {username} created a new discussion
  • New Post
    • {username} authored a new post
  • New User
    • {username} had just signed up
  • Post Unapproved
    • {username} created a post that requires approval

Available Permissions

  • Allowed to receive notification upon new discussion
  • Allowed to receive notification upon new post
  • Allowed to receive notification upon new user
  • Allowed to receive notification upon new unapproved post

Installation

Install manually with composer:

composer require fof/subscribed:"*"

Updating

composer update fof/subscribed

Links

OpenCollective

An extension by FriendsOfFlarum.

subscribed's People

Contributors

clarkwinkelmann avatar dependabot[bot] avatar dsevillamartin avatar eddiewebb avatar flarum-bot avatar imorland avatar karaok491 avatar luceos avatar ralkage avatar

Stargazers

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

Watchers

 avatar  avatar

subscribed's Issues

Permission settings not wholly respected

I have to report a bug.

I have set the permission for both, notifications upon a new discussion and notifications upon new users, to admins and mods only. Despite that, both subscription options appear in the user settings of users, that don't belong to one of these groups.

Selecting one of those notifications by users, that don't have the permission to do so, results in a kind of 'half notification' when the selected event happens: In the notification area, the name of the forum as an indicator of a forum wide event is shown as a header in bold, but no further details are revealed.

Default settings for users

Feature Request

My forum is used to update folks who are currently running purely on email. I would like to specify a "default" configuration for all users/new users to be subscribed to new posts/replies so their experience is that of the old email system.

I have looked at the standard subscription capabilities, and am thinking of creating a dummy user that emails to a mailing list....

flarum.ERROR: InvalidArgumentException: No hint path defined for [fof-subscribed]

[2020-11-15 15:57:44] flarum.ERROR: InvalidArgumentException: No hint path defined for [fof-subscribed]. in /var/www/html/flarum/vendor/illuminate/view/FileViewFinder.php:112
Stack trace:
#0 /var/www/html/flarum/vendor/illuminate/view/FileViewFinder.php(90): Illuminate\View\FileViewFinder->parseNamespaceSegments()
#1 /var/www/html/flarum/vendor/illuminate/view/FileViewFinder.php(76): Illuminate\View\FileViewFinder->findNamespacedView()
#2 /var/www/html/flarum/vendor/illuminate/view/Factory.php(131): Illuminate\View\FileViewFinder->find()
#3 /var/www/html/flarum/vendor/illuminate/mail/Mailer.php(355): Illuminate\View\Factory->make()
#4 /var/www/html/flarum/vendor/illuminate/mail/Mailer.php(334): Illuminate\Mail\Mailer->renderView()
#5 /var/www/html/flarum/vendor/illuminate/mail/Mailer.php(246): Illuminate\Mail\Mailer->addContent()
#6 /var/www/html/flarum/vendor/flarum/core/src/Notification/NotificationMailer.php(51): Illuminate\Mail\Mailer->send()
#7 /var/www/html/flarum/vendor/flarum/core/src/Notification/Job/SendEmailNotificationJob.php(37): Flarum\Notification\NotificationMailer->send()
#8 /var/www/html/flarum/vendor/illuminate/container/BoundMethod.php(36): Flarum\Notification\Job\SendEmailNotificationJob->handle()
#9 /var/www/html/flarum/vendor/illuminate/container/Util.php(37): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#10 /var/www/html/flarum/vendor/illuminate/container/BoundMethod.php(93): Illuminate\Container\Util::unwrapIfClosure()
#11 /var/www/html/flarum/vendor/illuminate/container/BoundMethod.php(37): Illuminate\Container\BoundMethod::callBoundMethod()
#12 /var/www/html/flarum/vendor/illuminate/container/Container.php(590): Illuminate\Container\BoundMethod::call()
#13 /var/www/html/flarum/vendor/illuminate/bus/Dispatcher.php(94): Illuminate\Container\Container->call()
#14 /var/www/html/flarum/vendor/illuminate/pipeline/Pipeline.php(130): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}()
#15 /var/www/html/flarum/vendor/illuminate/pipeline/Pipeline.php(105): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#16 /var/www/html/flarum/vendor/illuminate/bus/Dispatcher.php(98): Illuminate\Pipeline\Pipeline->then()
#17 /var/www/html/flarum/vendor/illuminate/queue/CallQueuedHandler.php(83): Illuminate\Bus\Dispatcher->dispatchNow()
#18 /var/www/html/flarum/vendor/illuminate/pipeline/Pipeline.php(130): Illuminate\Queue\CallQueuedHandler->Illuminate\Queue\{closure}()
#19 /var/www/html/flarum/vendor/illuminate/pipeline/Pipeline.php(105): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#20 /var/www/html/flarum/vendor/illuminate/queue/CallQueuedHandler.php(85): Illuminate\Pipeline\Pipeline->then()
#21 /var/www/html/flarum/vendor/illuminate/queue/CallQueuedHandler.php(59): Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware()
#22 /var/www/html/flarum/vendor/illuminate/queue/Jobs/Job.php(88): Illuminate\Queue\CallQueuedHandler->call()
#23 /var/www/html/flarum/vendor/illuminate/queue/SyncQueue.php(45): Illuminate\Queue\Jobs\Job->fire()
#24 /var/www/html/flarum/vendor/flarum/core/src/Notification/NotificationSyncer.php(163): Illuminate\Queue\SyncQueue->push()
#25 /var/www/html/flarum/vendor/flarum/core/src/Notification/NotificationSyncer.php(110): Flarum\Notification\NotificationSyncer->mailNotifications()
#26 /var/www/html/flarum/vendor/fof/subscribed/src/Jobs/SendNotificationWhenDiscussionIsStarted.php(55): Flarum\Notification\NotificationSyncer->sync()
#27 /var/www/html/flarum/vendor/illuminate/container/BoundMethod.php(36): FoF\Subscribed\Jobs\SendNotificationWhenDiscussionIsStarted->handle()
#28 /var/www/html/flarum/vendor/illuminate/container/Util.php(37): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#29 /var/www/html/flarum/vendor/illuminate/container/BoundMethod.php(93): Illuminate\Container\Util::unwrapIfClosure()
#30 /var/www/html/flarum/vendor/illuminate/container/BoundMethod.php(37): Illuminate\Container\BoundMethod::callBoundMethod()
#31 /var/www/html/flarum/vendor/illuminate/container/Container.php(590): Illuminate\Container\BoundMethod::call()
#32 /var/www/html/flarum/vendor/illuminate/bus/Dispatcher.php(94): Illuminate\Container\Container->call()
#33 /var/www/html/flarum/vendor/illuminate/pipeline/Pipeline.php(130): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}()
#34 /var/www/html/flarum/vendor/illuminate/pipeline/Pipeline.php(105): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#35 /var/www/html/flarum/vendor/illuminate/bus/Dispatcher.php(98): Illuminate\Pipeline\Pipeline->then()
#36 /var/www/html/flarum/vendor/illuminate/queue/CallQueuedHandler.php(83): Illuminate\Bus\Dispatcher->dispatchNow()
#37 /var/www/html/flarum/vendor/illuminate/pipeline/Pipeline.php(130): Illuminate\Queue\CallQueuedHandler->Illuminate\Queue\{closure}()
#38 /var/www/html/flarum/vendor/illuminate/pipeline/Pipeline.php(105): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#39 /var/www/html/flarum/vendor/illuminate/queue/CallQueuedHandler.php(85): Illuminate\Pipeline\Pipeline->then()
#40 /var/www/html/flarum/vendor/illuminate/queue/CallQueuedHandler.php(59): Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware()
#41 /var/www/html/flarum/vendor/illuminate/queue/Jobs/Job.php(88): Illuminate\Queue\CallQueuedHandler->call()
#42 /var/www/html/flarum/vendor/illuminate/queue/SyncQueue.php(45): Illuminate\Queue\Jobs\Job->fire()
#43 /var/www/html/flarum/vendor/fof/subscribed/src/Listeners/DiscussionCreated.php(72): Illuminate\Queue\SyncQueue->push()
#44 /var/www/html/flarum/vendor/illuminate/events/Dispatcher.php(369): FoF\Subscribed\Listeners\DiscussionCreated->whenDiscussionWasStarted()
#45 /var/www/html/flarum/vendor/illuminate/events/Dispatcher.php(218): Illuminate\Events\Dispatcher->Illuminate\Events\{closure}()
#46 /var/www/html/flarum/vendor/flarum/core/src/Foundation/DispatchEventsTrait.php(33): Illuminate\Events\Dispatcher->dispatch()
#47 /var/www/html/flarum/vendor/flarum/core/src/Discussion/Command/StartDiscussionHandler.php(97): Flarum\Discussion\Command\StartDiscussionHandler->dispatchEventsFor()
#48 /var/www/html/flarum/vendor/illuminate/bus/Dispatcher.php(90): Flarum\Discussion\Command\StartDiscussionHandler->handle()
#49 /var/www/html/flarum/vendor/illuminate/pipeline/Pipeline.php(130): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}()
#50 /var/www/html/flarum/vendor/illuminate/pipeline/Pipeline.php(105): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#51 /var/www/html/flarum/vendor/illuminate/bus/Dispatcher.php(98): Illuminate\Pipeline\Pipeline->then()
#52 /var/www/html/flarum/vendor/illuminate/bus/Dispatcher.php(76): Illuminate\Bus\Dispatcher->dispatchNow()
#53 /var/www/html/flarum/vendor/flarum/core/src/Api/Controller/CreateDiscussionController.php(72): Illuminate\Bus\Dispatcher->dispatch()
#54 /var/www/html/flarum/vendor/flarum/core/src/Api/Controller/AbstractSerializeController.php(96): Flarum\Api\Controller\CreateDiscussionController->data()
#55 /var/www/html/flarum/vendor/flarum/core/src/Api/Controller/AbstractCreateController.php(22): Flarum\Api\Controller\AbstractSerializeController->handle()
#56 /var/www/html/flarum/vendor/flarum/core/src/Http/RouteHandlerFactory.php(38): Flarum\Api\Controller\AbstractCreateController->handle()
#57 /var/www/html/flarum/vendor/flarum/core/src/Http/Middleware/DispatchRoute.php(65): Flarum\Http\RouteHandlerFactory->Flarum\Http\{closure}()
#58 /var/www/html/flarum/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\DispatchRoute->process()
#59 /var/www/html/flarum/vendor/flarum/core/src/Http/Middleware/SetLocale.php(50): Laminas\Stratigility\Next->handle()
#60 /var/www/html/flarum/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\SetLocale->process()
#61 /var/www/html/flarum/vendor/flarum/core/src/Http/Middleware/CheckCsrfToken.php(45): Laminas\Stratigility\Next->handle()
#62 /var/www/html/flarum/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\CheckCsrfToken->process()
#63 /var/www/html/flarum/vendor/flarum/core/src/Http/Middleware/AuthenticateWithHeader.php(55): Laminas\Stratigility\Next->handle()
#64 /var/www/html/flarum/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\AuthenticateWithHeader->process()
#65 /var/www/html/flarum/vendor/flarum/core/src/Http/Middleware/AuthenticateWithSession.php(32): Laminas\Stratigility\Next->handle()
#66 /var/www/html/flarum/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\AuthenticateWithSession->process()
#67 /var/www/html/flarum/vendor/flarum/core/src/Http/Middleware/RememberFromCookie.php(51): Laminas\Stratigility\Next->handle()
#68 /var/www/html/flarum/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\RememberFromCookie->process()
#69 /var/www/html/flarum/vendor/flarum/core/src/Http/Middleware/StartSession.php(61): Laminas\Stratigility\Next->handle()
#70 /var/www/html/flarum/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\StartSession->process()
#71 /var/www/html/flarum/vendor/flarum/core/src/Api/Middleware/FakeHttpMethods.php(29): Laminas\Stratigility\Next->handle()
#72 /var/www/html/flarum/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Api\Middleware\FakeHttpMethods->process()
#73 /var/www/html/flarum/vendor/flarum/core/src/Http/Middleware/ParseJsonBody.php(28): Laminas\Stratigility\Next->handle()
#74 /var/www/html/flarum/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\ParseJsonBody->process()
#75 /var/www/html/flarum/vendor/flarum/core/src/Http/Middleware/HandleErrors.php(57): Laminas\Stratigility\Next->handle()
#76 /var/www/html/flarum/vendor/laminas/laminas-stratigility/src/Next.php(61): Flarum\Http\Middleware\HandleErrors->process()
#77 /var/www/html/flarum/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(84): Laminas\Stratigility\Next->handle()
#78 /var/www/html/flarum/vendor/middlewares/request-handler/src/RequestHandler.php(84): Laminas\Stratigility\MiddlewarePipe->process()
#79 /var/www/html/flarum/vendor/laminas/laminas-stratigility/src/Next.php(61): Middlewares\RequestHandler->process()
#80 /var/www/html/flarum/vendor/middlewares/base-path-router/src/BasePathRouter.php(97): Laminas\Stratigility\Next->handle()
#81 /var/www/html/flarum/vendor/laminas/laminas-stratigility/src/Next.php(61): Middlewares\BasePathRouter->process()
#82 /var/www/html/flarum/vendor/laminas/laminas-stratigility/src/Middleware/OriginalMessages.php(42): Laminas\Stratigility\Next->handle()
#83 /var/www/html/flarum/vendor/laminas/laminas-stratigility/src/Next.php(61): Laminas\Stratigility\Middleware\OriginalMessages->process()
#84 /var/www/html/flarum/vendor/middlewares/base-path/src/BasePath.php(53): Laminas\Stratigility\Next->handle()
#85 /var/www/html/flarum/vendor/laminas/laminas-stratigility/src/Next.php(61): Middlewares\BasePath->process()
#86 /var/www/html/flarum/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(84): Laminas\Stratigility\Next->handle()
#87 /var/www/html/flarum/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(73): Laminas\Stratigility\MiddlewarePipe->process()
#88 /var/www/html/flarum/vendor/laminas/laminas-httphandlerrunner/src/RequestHandlerRunner.php(96): Laminas\Stratigility\MiddlewarePipe->handle()
#89 /var/www/html/flarum/vendor/flarum/core/src/Http/Server.php(42): Laminas\HttpHandlerRunner\RequestHandlerRunner->run()
#90 /var/www/html/flarum/index.php(26): Flarum\Http\Server->listen()
#91 {main}  
# php flarum info
Flarum core 0.1.0-beta.14.1
PHP version: 7.4.12
Loaded extensions: Core, date, libxml, openssl, pcre, zlib, filter, hash, pcntl, readline, Reflection, SPL, session, standard, bz2, calendar, ctype, curl, dom, mbstring, fileinfo, ftp, gd, gettext, iconv, json, exif, mysqlnd, PDO, Phar, SimpleXML, sockets, sqlite3, tokenizer, xml, xmlwriter, xsl, mysqli, pdo_mysql, pdo_sqlite, xmlreader, zip
+---------------------------------+------------------+--------+
| Flarum Extensions               |                  |        |
+---------------------------------+------------------+--------+
| ID                              | Version          | Commit |
+---------------------------------+------------------+--------+
| flarum-approval                 | v0.1.0-beta.14   |        |
| flarum-bbcode                   | v0.1.0-beta.12   |        |
| flarum-emoji                    | v0.1.0-beta.14   |        |
| flarum-flags                    | v0.1.0-beta.14.1 |        |
| flarum-likes                    | v0.1.0-beta.14   |        |
| flarum-lock                     | v0.1.0-beta.14   |        |
| flarum-markdown                 | v0.1.0-beta.14   |        |
| flarum-mentions                 | v0.1.0-beta.14   |        |
| flarum-sticky                   | v0.1.0-beta.14   |        |
| flarum-subscriptions            | v0.1.0-beta.14   |        |
| flarum-suspend                  | v0.1.0-beta.14   |        |
| flarum-tags                     | v0.1.0-beta.14   |        |
| flarum-lang-english             | v0.1.0-beta.14.1 |        |
| flarum-statistics               | v0.1.0-beta.14   |        |
| fof-user-bio                    | 0.3.1            |        |
| tolgaaaltas-lang-turkish        | 0.14.1           |        |
| v17development-seo              | 1.4              |        |
| fof-follow-tags                 | 0.5.1            |        |
| fof-formatting                  | 0.2.0            |        |
| fof-split                       | 0.5.0            |        |
| tolgaaaltas-turkish             | 0.14.0           |        |
| nearata-signup-confirm-password | v2.1.0           |        |
| fof-forum-statistics-widget     | 0.3.0            |        |
| nearata-copy-code-to-clipboard  | v1.1.0           |        |
| fof-drafts                      | 0.2.0            |        |
| fof-best-answer                 | 0.2.0            |        |
| fof-links                       | 0.4.0            |        |
| fof-linguist                    | 0.4.4            |        |
| fof-terms                       | 0.5.0            |        |
| fof-merge-discussions           | 0.4.0            |        |
| fof-spamblock                   | 0.3.0            |        |
| fof-stopforumspam               | 0.3.1            |        |
| fof-geoip                       | 0.2.0            |        |
| fof-ban-ips                     | 0.3.0            |        |
| matteocontrini-imgur-upload     | v3.4.1           |        |
| fof-reactions                   | 0.4.2            |        |
| fof-profile-image-crop          | 0.2.0            |        |
| fof-pages                       | 0.5.0            |        |
| fof-nightmode                   | 0.6.0            |        |
| fof-github-autolink             | 0.1.4            |        |
| kyrne-shout                     | 0.2.4-beta.1     |        |
| clarkwinkelmann-author-change   | 0.2.1            |        |
| fof-filter                      | 0.1.0-beta.3     |        |
| fof-username-request            | 0.3.0            |        |
| nomiscz-auth-steam              | v0.2.0           |        |
| fof-oauth                       | 0.1.0            |        |
| michaelbelgium-discussion-views | v5.0.0           |        |
| michaelbelgium-profile-views    | v4.0.0           |        |
| fof-analytics                   | 0.10.0           |        |
| askvortsov-categories           | v1.1.0           |        |
+---------------------------------+------------------+--------+
Base URL: https://dursuncanpoyraz.com.tr/flarum
Installation path: /var/www/html/flarum
Debug mode: off

No notification about waiting approval post

Bug Report

Current Behavior

I use first user post approval extension and subscribed extension.
When I have post that wait for approval no email notification are sent also if I activate to receive this email on my profile settings.

I register a new account than try to post a post.
The post is queued for the moderation but I don't get any email about that.

Expected Behavior
An email should alert admin and mod about the pending post approval

Environment

  • Flarum version: 1.3.1
  • Extension version: 1.1.2
  • Website URL: community.marcoborla.it
  • Webserver: [e.g. apache, nginx] Apache
  • Hosting environment: [e.g. shared, vps] VPS
  • PHP version: 8.1
  • Browser: [e.g. chrome 67, safari 11] Firefox latest 101.0.1

Notification web / email for flagged post

Feature Request

Is your feature request related to a problem? Please describe.

This extension resolve the issue to report by email when a new post is created or queued for the moderation.
I miss the possibility to be emailed when a post is reported for moderation.

Describe the solution you'd like

Add the possibility to be emailed on the case a post is flagged.
Currently there is no way on Flarum to be alerted by email if a post is flagged.

This great extension help to be informed when there is a new post, a new user, a queue for moderation post but not when moderators need take actions on a flagged post for abuse or spam.

User link Cannot use ::class with dynamic class name

Bug Report

Current Behavior
userCreated template fails.

Steps to Reproduce

Will ask more details to the user on the forum.

AH01071: Got error 'PHP message: PHP Fatal error: Cannot use ::class with dynamic class name in /home/carbonc/sites/flarum/storage/views/9b7fa1be6c50ebe5e1807399018192674d974eaa.php on line 5', referer: https://forum.ecocounts.community/users

This matches with this line of userCreated template.

'{user_url}' => $url->to('forum')->route('user', ['username' => $slugManager->forResource($blueprint->user::class)->toSlug($blueprint->user)]),

Environment

  • Flarum version: x.y.z
  • Extension version: x.y.z

Possible solution(s)
Can we just use User::class instead of $blueprint->user::class ?

Additional Context
Reported https://discuss.flarum.org/d/22608-create-user-modal/30

Discussion links don't use custom slugger

Bug Report

Current Behavior
All discussion links in mail templates are hard-coded to use discussion ID

'{discussion_url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->discussion->id]),

'{post_url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->post->discussion_id, 'near' => $blueprint->post->number]),

'{post_url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->post->discussion_id, 'near' => $blueprint->post->number]),

'{post_url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->post->discussion_id, 'near' => $blueprint->post->number]),

Expected Behavior
Should use slugger.

Environment

  • Extension version: observed on master branch during visual code review

Filter by tags

Can I receive the special post with some special tags?

Permission check doesn't work as expected

Hi,

I was wondering why nobody except me gets a notification about created discussions. So tried to find the root cause in the code and the thing is that the permission check referenced below returns true only for my account (I have the admin role, everybody else is just a member).

https://github.com/flagrow/subscribed/blob/8d1a8cfb675cf7f06b6c3611f7852ff5a8e5bd6d/src/Listeners/DiscussionCreated.php#L70

I haven't found the time yet to dig into the permission model and if this an expected behavior for some reason but if I remove the given discussion from the call the check succeeds.

$recipient->can('viewDiscussions');

Can you please have a look and tell me if this is the right approach?
If you need more information just let me know.

Thanks

Beta 8

@Ralkage I noticed that you created fork for upgrade to beta 8. Are you planning to finish it? If not, maybe you could make a pull request, and Luceos would merge it to some devel branch? I could try to finish it.

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.