Git Product home page Git Product logo

djangocms-bootstrap5's Introduction

django CMS Bootstrap 5 (WIP)

pypi build coverage

django CMS Bootstrap 5 is a plugin bundle for django CMS providing several

components from the popular Bootstrap 5 library.

Note

This project is endorsed by the django CMS Association.

That means that it is officially accepted by the dCA as being in line with our roadmap vision and development/plugin policy.

Join us on Slack.

image

Contributing

This is a an open-source project. We'll be delighted to receive your feedback in the form of issues and pull requests. Before submitting your pull request, please review our contribution guidelines.

We're grateful to all contributors who have helped create and maintain this package. Contributors are listed at the contributors section.

One of the easiest contributions you can make is helping to translate this addon on Transifex.

Documentation

See REQUIREMENTS in the setup.py file for additional dependencies:

python django djangocms

  • Django Filer 1.7 or higher
  • Django Text CKEditor 3.1 or higher

Make sure django Filer and django CMS Text CKEditor are installed and configured appropriately.

Installation

For a manual install:

  • run pip install djangocms-bootstrap5
  • add the following entries to your INSTALLED_APPS:

    'djangocms_icon',
    'djangocms_link',
    'djangocms_picture',
    'djangocms_bootstrap5',
    'djangocms_bootstrap5.contrib.bootstrap5_alerts',
    'djangocms_bootstrap5.contrib.bootstrap5_badge',
    'djangocms_bootstrap5.contrib.bootstrap5_card',
    'djangocms_bootstrap5.contrib.bootstrap5_carousel',
    'djangocms_bootstrap5.contrib.bootstrap5_collapse',
    'djangocms_bootstrap5.contrib.bootstrap5_content',
    'djangocms_bootstrap5.contrib.bootstrap5_grid',
    'djangocms_bootstrap5.contrib.bootstrap5_jumbotron',
    'djangocms_bootstrap5.contrib.bootstrap5_link',
    'djangocms_bootstrap5.contrib.bootstrap5_listgroup',
    'djangocms_bootstrap5.contrib.bootstrap5_media',
    'djangocms_bootstrap5.contrib.bootstrap5_picture',
    'djangocms_bootstrap5.contrib.bootstrap5_tabs',
    'djangocms_bootstrap5.contrib.bootstrap5_utilities',
  • run python manage.py migrate

Configuration

django CMS Bootstrap 5 utilises the following django CMS plugins:

It provides the following standard Bootstrap 5 components:

django CMS Bootstrap 5 does not add the styles or javascript files to your frontend, these need to be added at your discretion.

Settings

There are various settings possible on django CMS Bootstrap 5, to restrict them for now only the following can be changed:

DJANGOCMS_BOOTSTRAP5_TAG_CHOICES = ['div', 'section', 'article', 'header', 'footer', 'aside']

DJANGOCMS_BOOTSTRAP5_CAROUSEL_TEMPLATES = (
    ('default', _('Default')),
)

DJANGOCMS_BOOTSTRAP5_GRID_SIZE = 12
DJANGOCMS_BOOTSTRAP5_GRID_CONTAINERS = (
    ('container', _('Container')),
    ('container-fluid', _('Fluid container')),
)
DJANGOCMS_BOOTSTRAP5_GRID_COLUMN_CHOICES = (
    ('col', _('Column')),
    ('w-100', _('Break')),
    ('', _('Empty'))
)

DJANGOCMS_BOOTSTRAP5_USE_ICONS = True

DJANGOCMS_BOOTSTRAP5_TAB_TEMPLATES = (
    ('default', _('Default')),
)

DJANGOCMS_BOOTSTRAP5_SPACER_SIZES = (
    ('0', '* 0'),
    ('1', '* .25'),
    ('2', '* .5'),
    ('3', '* 1'),
    ('4', '* 1.5'),
    ('5', '* 3'),
)

DJANGOCMS_BOOTSTRAP5_CAROUSEL_ASPECT_RATIOS = (
    (16, 9),
)

DJANGOCMS_BOOTSTRAP5_COLOR_STYLE_CHOICES = (
    ('primary', _('Primary')),
    ('secondary', _('Secondary')),
    ('success', _('Success')),
    ('danger', _('Danger')),
    ('warning', _('Warning')),
    ('info', _('Info')),
    ('light', _('Light')),
    ('dark', _('Dark')),
    ('custom', _('Custom')),
)

Please be aware that this package does not support djangocms-text-ckeditor's Drag & Drop Images so be sure to set TEXT_SAVE_IMAGE_FUNCTION = None.

Running Tests

You can run tests by executing:

virtualenv env
source env/bin/activate
pip install -r tests/requirements.txt
python setup.py test

To run the frontend make sure to use node 10.x.

djangocms-bootstrap5's People

Contributors

crydotsnake avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

djangocms-bootstrap5's Issues

Djangocms-bootstrap 5 creates problems with Django 4.2

Hi,
In my experience, I am having problems with the bootstrap5-grid plugin. In django 4

from django.utils.translation import gettext_lazy as _
from django.utils.translation import ungettext

In the code of Bootstrap5 Grid plugin models.py file I had to change ungettext to ngettex as django does not use ungettext, ngettext instead.

After that now I am getting problems while creating a Grid, because of help_text field.

<h1>TypeError
       at /admin/cms/staticplaceholder/add-plugin/</h1>
  <pre class="exception_value">__str__ returned non-string (type __proxy__)</pre>
  

Request Method: | GET
-- | --
Environment:


Request Method: GET
Request URL: http://abctasarim.com/admin/cms/staticplaceholder/add-plugin/?placeholder_id=15&plugin_type=Bootstrap5GridContainerPlugin&cms_path=/?structure&plugin_language=tr

Django Version: 4.2
Python Version: 3.11.3
Installed Applications:
['djangocms_admin_style',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.sites',
 'cms',
 'menus',
 'treebeard',
 'sekizai',
 'flags',
 'filer',
 'easy_thumbnails',
 'mptt',
 'parler',
 'djangocms_file',
 'djangocms_picture',
 'djangocms_video',
 'djangocms_googlemap',
 'djangocms_snippet',
 'djangocms_style',
 'djangocms_icon',
 'djangocms_link',
 'djangocms_text_ckeditor',
 'djangocms_bootstrap5',
 'djangocms_bootstrap5.contrib.bootstrap5_alerts',
 'djangocms_bootstrap5.contrib.bootstrap5_badge',
 'djangocms_bootstrap5.contrib.bootstrap5_card',
 'djangocms_bootstrap5.contrib.bootstrap5_carousel',
 'djangocms_bootstrap5.contrib.bootstrap5_collapse',
 'djangocms_bootstrap5.contrib.bootstrap5_content',
 'djangocms_bootstrap5.contrib.bootstrap5_grid',
 'djangocms_bootstrap5.contrib.bootstrap5_jumbotron',
 'djangocms_bootstrap5.contrib.bootstrap5_link',
 'djangocms_bootstrap5.contrib.bootstrap5_listgroup',
 'djangocms_bootstrap5.contrib.bootstrap5_media',
 'djangocms_bootstrap5.contrib.bootstrap5_picture',
 'djangocms_bootstrap5.contrib.bootstrap5_tabs',
 'djangocms_bootstrap5.contrib.bootstrap5_utilities',
 'luftchem.apps.base',
 'luftchem.apps.products']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'cms.middleware.user.CurrentUserMiddleware',
 'cms.middleware.page.CurrentPageMiddleware',
 'cms.middleware.toolbar.ToolbarMiddleware',
 'cms.middleware.language.LanguageCookieMiddleware',
 'cms.middleware.utils.ApphookReloadMiddleware']


Template error:
In template /home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/contrib/admin/templates/admin/includes/fieldset.html, error at line 26
   __str__ returned non-string (type __proxy__)
   16 :                                 {{ field.label_tag }}
   17 :                                 {% if field.is_readonly %}
   18 :                                     <div class="readonly">{{ field.contents }}</div>
   19 :                                 {% else %}
   20 :                                     {{ field.field }}
   21 :                                 {% endif %}
   22 :                             {% endif %}
   23 :                         </div>
   24 :                     {% if field.field.help_text %}
   25 :                         <div class="help"{% if field.field.id_for_label %} id="{{ field.field.id_for_label }}_helptext"{% endif %}>
   26 :                             <div> {{ field.field.help_text | safe  }} </div>
   27 :                         </div>
   28 :                     {% endif %}
   29 :                 </div>
   30 :             {% endfor %}
   31 :             {% if not line.fields|length == 1 %}</div>{% endif %}
   32 :         </div>
   33 :     {% endfor %}
   34 : </fieldset>
   35 : 

Traceback (most recent call last):
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/core/handlers/base.py", line 220, in _get_response
    response = response.render()
               ^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/response.py", line 111, in render
    self.content = self.rendered_content
                   ^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/response.py", line 89, in rendered_content
    return template.render(context, self._request)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 175, in render
    return self._render(context)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 167, in _render
    return self.nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/loader_tags.py", line 157, in render
    return compiled_parent._render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 167, in _render
    return self.nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/loader_tags.py", line 157, in render
    return compiled_parent._render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 167, in _render
    return self.nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/loader_tags.py", line 157, in render
    return compiled_parent._render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 167, in _render
    return self.nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/loader_tags.py", line 63, in render
    result = block.nodelist.render(context)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/loader_tags.py", line 63, in render
    result = block.nodelist.render(context)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/defaulttags.py", line 238, in render
    nodelist.append(node.render_annotated(context))
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/loader_tags.py", line 208, in render
    return template.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 177, in render
    return self._render(context)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 167, in _render
    return self.nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/defaulttags.py", line 238, in render
    nodelist.append(node.render_annotated(context))
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/defaulttags.py", line 238, in render
    nodelist.append(node.render_annotated(context))
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/defaulttags.py", line 321, in render
    return nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 1064, in render
    output = self.filter_expression.resolve(context)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/base.py", line 742, in resolve
    new_obj = func(obj, *arg_vals)
              ^^^^^^^^^^^^^^^^^^^^
  File "/home/ytsejam/.virtualenvs/luftchem/lib/python3.11/site-packages/django/template/defaultfilters.py", line 47, in _dec
    first = str(first)
            ^^^^^^^^^^

Exception Type: TypeError at /admin/cms/staticplaceholder/add-plugin/
Exception Value: __str__ returned non-string (type __proxy__)


Can we fix the help_text field?

Regards

link + picture: Add exception handling for unregister_plugin.

Both link and picture plugin unregister their original django-cms version.
However there are neither checks if the plugin is still registered nor exception handling causing a cms.exceptions.PluginNotRegistered: The plugin <class 'djangocms_picture.cms_plugins.[PicturePlugin|LinkPlugin]'> is not registered-Exception. This happens for example if bootstrap4_link or bootstrap4_picture are used in the same project.

Error during installation

Hi, hope someone can assist.

I am pretty new to Django CMS. I am trying to install this bootstrap-5 stuff, however during install when I have
cms.exceptions.PluginAlreadyRegistered: Cannot register <class 'djangocms_link.cms_plugins.LinkPlugin'>, a plugin with this name ('LinkPlugin') is already registered.

If I remove 'djangocms_link', listed in my INSTALLED_APPS I get the error below when running python manage.py migrate

RuntimeError: Model class djangocms_link.models.Link doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

Can anyone help please
Thanks

Block button rendering method is incorrect

In versions of Bootstrap prior to 5, the way to make a block button was to add the btn-block class.

This is no longer the approach - instead the button should be contained in a div as documented here

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.