hvlads / django-ckeditor-5 Goto Github PK
View Code? Open in Web Editor NEWDjango CKEditor 5 integration.
License: Other
Django CKEditor 5 integration.
License: Other
It would be great if we had more control over what elements are allowed within CKeditor In the current version, I can't add an <iframe>. This seems like a natural progression since source editing was turned on recently.
According to the ckeditor docs:
The General HTML Support (“GHS”) feature allows developers to easily enable HTML features that are not explicitly supported by any other dedicated CKEditor 5 plugins. It acts similarly to Advanced Content Filter (ACF) from CKEditor 4, a feature that filters incoming HTML content by transforming and deleting disallowed elements, attributes, classes and styles. GHS allows for adding this kind of markup to the source and prevents it from being filtered from the editor window and the output.
There are security implications, but I think it makes sense to provide users a way to enable these elements and assume the risks themselves.
When I was uploaded image from backend django admin then the image is not getting upload on aws s3 media folder with name django-ckeditor-5/example.img. It is creating one folder with name django-ckeditor-5 on local server. but Not uploading on aws s3 media folder.
I have putted both path but not working
path(r'^ckeditor5/(?P<path>.*)/?$', include('django_ckeditor_5.urls')),
path("ckeditor5/", include('django_ckeditor_5.urls')),
and tried with this one also
re_path(r'^(?:.*)/?$', include('frontend.urls'))
mine issue is exact same as issue #10
Am I applying it in wrong way?
Click here to check my question on stackoverflow.
Hi, i have issue installing new plugins
i follow the instruction from other closed post:
#21
Clone the repo
npm install
npm install @ckeditor/ckeditor5-word-count
https://ckeditor.com/docs/ckeditor5/latest/features/word-count.html#installation
inside app.js
import WordCount from '@ckeditor/ckeditor5-word-count/src/wordcount';
passing WordCount as plugin value
and
npm run prod
the result is:
Uncaught CKEditorError: ckeditor-duplicated-modules
i did the same inside ckeditor.js i imported
import WordCount from '@ckeditor/ckeditor5-word-count/src/wordcount';
and put WordCount in the ClassicEditor.builtinPlugins
Same result
What im doing wrong?
Thanks
It doesn't work with simple forms, only woth ModelForm, does it?
In Django 3.2 and higher, the admin page respects the theme of the system. In MacOS, if the theme is dark, the whole django admin UI is dark as well.
What seems to be happening is that the text color is being changed to white, but the background of ckeditor stays white as well.
1 - Turn on Dark mode at the OS or browser level
2 - Visit the admin page and open a page with ckeditor
Text is white on white
Ckeditor is either not affected by theme change or it switches into its own dark mode.
1 - If you highlight all the text and make it black, it makes it readable, but code blocks stay white
2 - You could use the django-non-dark-admin module to disable admin dark mode (This is what I did)
3 - You could disable dark theme by modifying the django admin css as explained in this stackoverflow thread.
4 - Only use CKeditor outside of the admin page
5 - Use CKEDITOR_5_CUSTOM_CSS variable in settings.py to point to alternate CSS?
CKeditor 5 Theme customization page
I've disabled the dark Django admin page for now, but any workarounds would be much appreciated!!!
django-ckeditor-5==0.1.3
Python==3.9.7
I have the same issue. 'mediaEmbed': {'previewsInData': True}, - didn't help
Hi
I tried out django-ckeditor-5 for the first time today. In development mode it worked very well.
However, I tried to deploy on Heroku and got following error message:
The CSS file 'django_ckeditor_5/src/custom_plugins/theme/titleform.css' references a file which could not be found:
django_ckeditor_5/src/custom_plugins/theme/@ckeditor/ckeditor5-ui/theme/mixins/_rwd.css
and in titleform.css I found follwing import, which can not be resolved.
@import "@ckeditor/ckeditor5-ui/theme/mixins/_rwd.css";
My environment:
asgiref==3.3.4
certifi==2020.12.5
dj-database-url==0.5.0
Django==3.2
django-ckeditor-5==0.0.14
django-crispy-forms==1.11.0
django-on-heroku==1.1.2
gunicorn==20.1.0
Pillow==8.2.0
psycopg2-binary==2.8.6
pytz==2021.1
sqlparse==0.4.1
whitenoise==5.2.0
Any idea how I can solve this? Let me know if you need more information.
Thanks and best regards,
Cedric
root@cdasia:/home# pip install django-ckeditor-5
Requirement already satisfied: django-ckeditor-5 in /usr/local/lib/python3.9/dist-packages (0.1.9)
Requirement already satisfied: Django==4.1 in /usr/local/lib/python3.9/dist-packages (from django-ckeditor-5) (4.1)
Requirement already satisfied: Pillow==9.0.1 in /usr/local/lib/python3.9/dist-packages (from django-ckeditor-5) (9.0.1)
Requirement already satisfied: asgiref<4,>=3.5.2 in /usr/local/lib/python3.9/dist-packages (from Django==4.1->django-ckeditor-5) (3.5.2)
Requirement already satisfied: sqlparse>=0.2.2 in /usr/local/lib/python3.9/dist-packages (from Django==4.1->django-ckeditor-5) (0.4.2)
root@cdasia:/home# python3
Python 3.9.2 (default, Feb 28 2021, 17:03:44)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
import django_ckeditor_5
Traceback (most recent call last):
File "", line 1, in
ModuleNotFoundError: No module named 'django_ckeditor_5'
1 - Add an image using the image option in the toolbar
2 - CSRF error
Following this SO answer I added the following to django_ckeditor_5.views
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def upload_file(request):
if request.method == "POST" and request.user.is_staff:
form = UploadFileForm(request.POST, request.FILES)
try:
image_verify(request.FILES["upload"])
except NoImageException as ex:
return JsonResponse({"error": {"message": "{}".format(str(ex))}})
if form.is_valid():
url = handle_uploaded_file(request.FILES["upload"])
return JsonResponse({"url": url})
raise Http404(_("Page not found."))
and the image uploads sucessfully.
This also appears to be the same thing django-ckeditor is doing. See line 136 in their view
upload = csrf_exempt(ImageUploadView.as_view())
Environment
Python==3.9.7
django-ckeditor-5==0.1.0
django==3.2.13
Hello, I've just now upgraded to django-ckeditor 5 and when trying to upload an image, I get a 403 error saying csrf token missing
[29/Aug/2022 11:40:57] "GET /admin/jsi18n/ HTTP/1.1" 200 3343 Forbidden (CSRF token missing.): /ckeditor5/image_upload/ [29/Aug/2022 11:43:07] "POST /ckeditor5/image_upload/ HTTP/1.1" 403 2506
it's my first time submitting a github issue so if this has nothing to do with django-ckeditor-5 then I'll appriciate if I'm pointed to the right resource.
Hi,
ugettext_lazy removed in django 4.0
I use a package called django-fastdev that surfaces FastDevVariableDoesNotExist whenever a template variable does not exist (instead of rendering an empty string).
This causes fatal errors in django-ckeditor-5
1 - Install django-fastdev
2 - Access Ckeditor 5 within your Django app
FastDevVariableDoesNotExist
errors does not exist in context.
Only show {{ errors }} if errors actually exist.
When I was uploaded image from backend django admin then the image is not getting upload on aws s3 media folder with name django-ckeditor-5/example.img. It is creating one folder with name django-ckeditor-5 on local server. but Not uploading on aws s3 media folder.
In order to get ckeditor5 CSS styles into the front end (like a post detail route), you need to download the CSS file from the CKeditor5 docs.
Then you include it on your page
<link rel="stylesheet" href="path/to/assets/content-styles.css" type="text/css">
Finally, you want to make sure that the ck-content class is included in the parent element that contains your ckeditor5 content. For me, it was something like this:
<div class="ck-content">
<p>{{ post.content|safe }}</p>
</div>
I don't think this is obvious and should be included in an example or in the readme.
CKEditor is no working in template. But it is working perfectly in admin page. Why?
How do I import new plugins such as TableProperties?
Do I add them to custom_plugins?
I don't want to install npm or anything, is this possible?
Can you please share step by step procedure for adding new plugins? I tried but not able to add the new plugins. Even I tried the online builder of ckeditor5. (https://ckeditor.com/ckeditor-5/online-builder/) :(
Currently, we have the ability to upload images using the imageUpload toolbar item. Unfortunately, this does not work when using images that are hosted elsewhere and you do not want to upload a copy.
If you add imageUpload
to the toolbar, you can upload images, but there is no way to reference the image via URL.
You can add the image manually using a tag and enable the source toolbar item.
< image src="..." > example image < / img >
But this is a lot of extra typing.
According to the CKeditor5 documentation if we install the ImageInsert
extension, we can replace imageUpload with insertImage. This toolbar item has an extra dropdown next to the image icon that lets you add an image via URL
Once this is added, we should be able to just replace imageUpload with insertImage in our toolbar configuration within settings.json
How to add it in frontend templates forms ?
Is there an easy way that will allow me to upload files such as PDFs. Looks like the code only accepts images what would I have to remove in order to be able to upload PDFs.
@hvlads
i cant save text alignment, it not work anymore, after edit with django admin and open it again, it back to default state
Hi, my apologies, certainly this question is not an issue. I'm trying set a link into image and when I select the image, the link icon is disabled and doesn't work:
Would be possible a behaviour like this?
I'm using django-ckeditor-5 version 0.1.8
Do I need any extra configuration?
Best regards,
Jorge.
CKEditor 5 is GPL, not LPGL.
This means, if you create a commercial site with it, you might get legal troubles.
Are you aware if this?
See: https://ckeditor.com/docs/ckeditor5/latest/builds/guides/support/license-and-legal.html
I'm trying to setup this app on one of my websites. However, when I attempt to load the page containing the CKEditor5 field, I get an error in my browser developer console that's related to the line above.
The exact error is:
Uncaught TypeError: Cannot read property 'style' of null
at HTMLDocument.<anonymous> (app.js:25)
It seems that, for some reason, document.querySelector
is returning no matches. I don't understand the syntax in this particular selector, so I'm unable to debug this. Any pointers?
I have recently been exploring using WhiteNoise in my Django app. I see an error whenever I run collectstatic.
1 - Install WhiteNoise
2 - manage.py collectstatic
Error in terminal
Post-processing 'django_ckeditor_5/src/custom_plugins/theme/titleform.css' failed!
Traceback (most recent call last):
File "/Users/johnsolly/Documents/code/blogthedata/django_project/manage.py", line 21, in <module>
main()
File "/Users/johnsolly/Documents/code/blogthedata/django_project/manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "/Users/johnsolly/Documents/code/blogthedata/django_project/venv/lib/python3.9/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
utility.execute()
File "/Users/johnsolly/Documents/code/blogthedata/django_project/venv/lib/python3.9/site-packages/django/core/management/__init__.py", line 440, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/johnsolly/Documents/code/blogthedata/django_project/venv/lib/python3.9/site-packages/django/core/management/base.py", line 414, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/johnsolly/Documents/code/blogthedata/django_project/venv/lib/python3.9/site-packages/django/core/management/base.py", line 460, in execute
output = self.handle(*args, **options)
File "/Users/johnsolly/Documents/code/blogthedata/django_project/venv/lib/python3.9/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 209, in handle
collected = self.collect()
File "/Users/johnsolly/Documents/code/blogthedata/django_project/venv/lib/python3.9/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 154, in collect
raise processed
whitenoise.storage.MissingFileError: The file 'django_ckeditor_5/src/custom_plugins/theme/@ckeditor/ckeditor5-ui/theme/mixins/_rwd.css' could not be found with <whitenoise.storage.CompressedManifestStaticFilesStorage object at 0x106ca5070>.
The CSS file 'django_ckeditor_5/src/custom_plugins/theme/titleform.css' references a file which could not be found:
django_ckeditor_5/src/custom_plugins/theme/@ckeditor/ckeditor5-ui/theme/mixins/_rwd.css
Please check the URL references in this CSS file, particularly any
relative paths which might be pointing to the wrong location.
I checked the file and I think there is an issue on line 6 where it attempts to import a CSS file that does not exist.
/* django_ckeditor_5/static/django_ckeditor_5/src/custom_plugins/theme/titleform.css */
@import "@ckeditor/ckeditor5-ui/theme/mixins/_rwd.css";
I'm trying to insert a YouTube video link via the "Insert media" button in the editor. While the video preview showing up in the editor, it doesn't appear on the rendered page. Instead, it generates HTML like this:
<figure class="media"><oembed url="https://www.youtube.com/watch?v=XXXXXXXX"></oembed></figure>
According to the description, the MediaEmbed plugin is included in this package and it should work with YouTube links. Isn't it?
Thanks!
Table captions are recommended for sighted and unsighted users. This allows them to quickly understand what the table is about without having to start reading/listening through the data of the table.
See -> https://www.w3.org/WAI/tutorials/tables/caption-summary/
Captions can be turned on/off. This is how it works in the CKEditor5 demo editor.
According to the CKEDitor5 docs, this can be 'turned on' by adding the tableCaption
plugin.
Hello again!
Thanks for helping me with the previous issue! Now the package seems to work, but not quite correctly. I'm having two different issues with different CBV views.
Forbidden (CSRF token missing or incorrect.): /ckeditor5/image_upload/
WARNING 2020-12-01 12:21:16,314 log 43989 140116421977856 Forbidden (CSRF token missing or incorrect.): /ckeditor5/image_upload/
[01/Dec/2020 12:21:16] "POST /ckeditor5/image_upload/ HTTP/1.1" 403 14187
As I understand, the first error is related to CSRF tokens, and the second error may be (possibly) related to form validity. But I don't know how to solve them. Please give me some ideas.
Hi,
Would it be possible to replace the default HTML code that displays the images? I need to implement a bootstrap modal for images to open them full screen. Currently, the saved images are displayed as:
<figure class="image image-style-align-center image_resized" style="width:100%;"><img src="URL_TO_IMAGE"></figure>
And I would like to add a bootstrap modal for each image. Or an alternative would be making the images clickable to open in a new tab. Thank you!
I was previously using django-ckeditor which is built on ckeditor4 and am trying to migrate to ckeditor5 with this module.
It works perfectly on the admin page
But ckeditor5 does not load in my post-create route when there is a wiget attached to the form field. My goal in using the widget is to add a class to the field so that line numbers show up when using Prisim.js.
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = (
"content",
)
widgets = {
"content": forms.Textarea(attrs={"class": "line-numbers"}),
}
If I remove the widget, ckeditor loads successfully.
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = (
"content",
)
Python==3.9.7
django-ckeditor-5==0.1.0
django==3.2.13
I think this might be because this module was created to be used on the admin page as mentioned in this issue.
I am using django-storages with storages.backends.gcloud.GoogleCloudStorage
backend. I have set these settings:
CKEDITOR5_FILE_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage' CKEDITOR_5_UPLOADS_FOLDER = 'uploads/'
However, when I try to upload an image, I get this error:
Internal Server Error: /ckeditor5/image_upload/
Traceback (most recent call last):
File "/opt/homebrew/Caskroom/miniforge/base/envs/stokk/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/opt/homebrew/Caskroom/miniforge/base/envs/stokk/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/homebrew/Caskroom/miniforge/base/envs/stokk/lib/python3.9/site-packages/django_ckeditor_5/views.py", line 54, in upload_file
url = handle_uploaded_file(request.FILES["upload"])
File "/opt/homebrew/Caskroom/miniforge/base/envs/stokk/lib/python3.9/site-packages/django_ckeditor_5/views.py", line 41, in handle_uploaded_file
fs = storage(location=uploads_path)
File "/opt/homebrew/Caskroom/miniforge/base/envs/stokk/lib/python3.9/site-packages/storages/backends/gcloud.py", line 97, in __init__
check_location(self)
File "/opt/homebrew/Caskroom/miniforge/base/envs/stokk/lib/python3.9/site-packages/storages/utils.py", line 93, in check_location
if storage.location.startswith('/'):
AttributeError: 'PosixPath' object has no attribute 'startswith'
[04/May/2022 15:00:20] "POST /ckeditor5/image_upload/ HTTP/1.1" 500 105904
Other relevant settings:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
django-ckeditor4 worked fine, so is it a question of supporting GCB storage or am I missing something in my settings?
I need to install new plugin (Markdown)
How do i do it?
Hello! My website uses django-modeltranslation to support different languages. When I try to install django-ckeditor-5, I got the following error:
django.core.exceptions.ImproperlyConfigured: CKEditor5Field is not supported by modeltranslation.
Here is some additional information from the sunserver command:
File "/media/mike/Data/Websites/raptors/raptors/news/translation.py", line 7, in
translator.register(Article, ArticleTranslationOptions)
File "/media/mike/Data/Websites/raptors-env/lib/python3.9/site-packages/modeltranslation/translator.py", line 457, in register
self._register_single_model(model, opts)
File "/media/mike/Data/Websites/raptors-env/lib/python3.9/site-packages/modeltranslation/translator.py", line 474, in _register_single_model
add_translation_fields(model, opts)
File "/media/mike/Data/Websites/raptors-env/lib/python3.9/site-packages/modeltranslation/translator.py", line 149, in add_translation_fields
translation_field = create_translation_field(
File "/media/mike/Data/Websites/raptors-env/lib/python3.9/site-packages/modeltranslation/fields.py", line 67, in create_translation_field
raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: CKEditor5Field is not supported by modeltranslation.
Is it possible to use both django-ckeditor-5 and django-modeltranslation?
I couldn't find any information about how to handle the problem with the upload of a file, especially an image. Is there any solution?
Whoa! Thank you so much for this fantastic work! I have a problem, I can't install MathType (CKEDITOR's plugin), I tried to add it under 'toolbar', but nothing...I think it's just missing the plugin. How can I fix this?
Hi,
I would like to change the default upload path and add a user id to the path. I've found the CKEDITOR_5_UPLOADS_FOLDER setting, but is there any way to add a user id to the path, for example, /content/{USER_ID}/?
Thanks!
I had error because your package does not support locale prefix in urls, i fixed it this way:
urlpatterns = [
path('ckeditor5/', include('django_ckeditor_5.urls')),
]
urlpatterns += i18n_patterns(
// all my other urls
)
how it should works:
urlpatterns += i18n_patterns(
path('ckeditor5/', include('django_ckeditor_5.urls')),
)
can you add i18n support, for example package nested admin, works perfectly when wrapped in i18n_patterns?
P.S. Awesome package!
I want to show a Youtube video inside a blog post. It works great while editing, but as soon as I view the post on my website, I no longer see the media preview.
Nothing shows in viewing mode. It appears that the elements are there, but they don't render
1 - Copy a link to a Youtube video (such as https://www.youtube.com/watch?v=C5M2cy80LxE )
2 - Paste this link into the editing area or using the 'Media Embed' tool within ckeditor 5
3 - Video preview shows as expected in the editor
4 - View the content outside the editor (like a user would)
No preview is shown
I found this SO thread that suggests adding "previewsInData": "true" to the config, but this didn't work for me.
mediaEmbed: {
previewsInData:true
},
According to the Ckeditor 5 docs
By default, the media embed feature produces output that does not contain previews of embedded media, called the semantic output. This means that you need to transform the output elements into real media on your target website.
There are many ways to do that. The simplest, plug-and-play solutions are described here. You can also implement this transformation as part of your back-end service or you can use different services than described in this section.
The docs then go into various ways to accomplish this, one being adding Iframely.
Media embeds (such as Youtube videos) render in viewing mode.
Source editing plugin is not showing up in the toolbar despite being added to the config.
I am running the latest version (django-ckeditor-5==0.1.8).
My config looks as follows:
CKEDITOR_5_CONFIGS = {
'default': {
'toolbar': ['heading', '|', 'bold', 'italic', 'link',
'bulletedList', 'numberedList', 'blockQuote', 'imageUpload', ],
},
'extends': {
"htmlSupport": {
"allow": [
{"name": "/.*/", "attributes": True, "classes": True, "styles": True}
]
},
"mediaEmbed": {"previewsInData": "false", },
'blockToolbar': [
'paragraph', 'heading1', 'heading2', 'heading3',
'|',
'bulletedList', 'numberedList',
'|',
'blockQuote', 'imageUpload'
],
'toolbar': ['heading', '|', 'outdent', 'indent', '|', 'bold', 'italic', 'link', 'underline', 'strikethrough',
'code','subscript', 'superscript', 'highlight', '|', 'codeBlock',
'bulletedList', 'numberedList', 'todoList', '|', 'blockQuote', 'imageUpload', 'sourceEditing', '|',
'fontSize', 'fontFamily', 'fontColor', 'fontBackgroundColor', 'mediaEmbed', 'removeFormat',
'insertTable'],
'image': {
'toolbar': ['toggleImageCaption', '|', 'imageTextAlternative', '|', 'imageStyle:alignLeft',
'imageStyle:alignRight', 'imageStyle:alignCenter', '|', 'imageStyle:side', 'imageStyle:inline', '|'],
'styles': [
'full',
'side',
'alignLeft',
'alignRight',
'alignCenter',
]
},
'table': {
'contentToolbar': [ 'tableColumn', 'tableRow', 'mergeTableCells',
'tableProperties', 'tableCellProperties' ],
'tableProperties': {
'borderColors': customColorPalette,
'backgroundColors': customColorPalette
},
'tableCellProperties': {
'borderColors': customColorPalette,
'backgroundColors': customColorPalette
}
},
'heading' : {
'options': [
{ 'model': 'paragraph', 'title': 'Paragraph', 'class': 'ck-heading_paragraph' },
{ 'model': 'heading1', 'view': 'h1', 'title': 'Heading 1', 'class': 'ck-heading_heading1' },
{ 'model': 'heading2', 'view': 'h2', 'title': 'Heading 2', 'class': 'ck-heading_heading2' },
{ 'model': 'heading3', 'view': 'h3', 'title': 'Heading 3', 'class': 'ck-heading_heading3' }
]
},
},
'list': {
'properties': {
'styles': 'true',
'startIndex': 'true',
'reversed': 'true',
}
},
}
I have a CSP (Content Security Policy) for my app. When I turn off 'unsafe-inline' for styles, I see a lot of errors in the console
1 - Install django-csp
2 - Add the following security policy in settings.py
CSP_STYLE_SRC = "'self'"
3 - Start using CKEditor in edit mode
Lots of errors in console. Most functionality is maintained, but some things are broken (like image re-size).
According to the CKEditor docs:
Note: You can extract styles to a separate .css file during the editor building process and remove this directive.
I wonder if this is something we can do ourselves or if it requires work for the maintainers. I do see code in config.webpack.js that looks like it performs the CSS extraction.
hey there i have 2 questions:
1)how to change language of ckeditor?
2)how to change type, version of ckeditor?
Thanks!
Currently, it appears all images are going into the "/media." This works, but it would be really nice if we could change this to /media/uploads to keep things clean.
All images are saved in MEDIA_ROOT
Image uploads respect a setting set in the settings.py file such as CKEDITOR_5_UPLOAD_PATH
django-ckeditor has a pretty good approach in their file upload section.
In the admin panel, when editing a post, the video is shown. But when viewing a post on the frontend, the video is not displayed.
In this case, the html code is there.
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.