Coder Social home page Coder Social logo

grav-plugin-archives's People

Contributors

flaviocopes avatar kaynenh avatar khanduras avatar lamecarlate avatar mahagr avatar nbusseneau avatar rhukster avatar ryanmpierson avatar w00fz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

grav-plugin-archives's Issues

Order by Date Published

Could we get a "Date Published - based on publish_date field in page header" option, with a fallback to date if publish_date isn't available?

custom date format support in blueprints.yaml

The blueprints.yaml only support limited type of date format
some countries use different date format for example:
China uses format like "2019年-05月-08日"
Japan uses format like "令和元年5月" etc. very tricky though...

maybe add more options for the users using the date format like 'Y-m':"2019-05"
or a custom input box to input the format settings in the web interface

    date_display_format:
      type: select
      size: medium
      classes: fancy
      label: Date Format
      default: 'jS M Y'
      options:
        'F jS Y': "January 1st 2014"
        'l jS of F': "Monday 1st of January"
        'D, m M Y': "Mon, 01 Jan 2014"
        'd-m-y': "01-01-14"
        'jS M Y': "10th Feb 2014"
        'F Y': "Jan 2015"

sort by year then month?

I just started playing around with grav the other day, but I did notice something I would like to do with the output of the archives... sorting by year then month within each year?

Is this possible? I know I can do something like archives_year:2014 and archives_month:jun_2014, but is the looping possible the way the plugin is setup?

The default is something along the lines of :

{% for month,items in archives_data %}
    <li>
    	<a href="{{ base_url }}/{{ config.plugins.archives.taxonomy_names.month }}{{ config.system.param_sep }}{{ month|date('M_Y')|lower|e('url') }}">
        {{ month }}
        </a>
        {% if archives_show_count %}
        	({{ items|length }})
        {% endif %}
    </li>
{% endfor %}

I would need a loop for each year and then another for each month/item in that year... so is there a way to 'store' each result array and loop through each month then?

not displaying articles in respective months

Hi guys,
I've been playing a bit with the archives and it seems that somehow the months appear to be translated using antimatter theme.
The issue is that pressing "march" will result in the same page being loaded with same articles, the only thing changed being the url with the addition of the archives:march ...
Same thing happens with June, July, any months. It will display same articles on the same page.

before
captura de ecran din 2016 05 15 la 00 29 49

after
captura de ecran din 2016 05 15 la 00 29 58

Turning "Show Count" off makes archive listings disappear forever

(Started from TwentyFifteen skeleton, added Admin plugin, updated all.)

Steps to reproduce

  1. Install a skeleton which features an Archive listing (e.g. TwentyFifteen)
  2. In the "Archives" plugin settings, turn the "Show Count" option off
  3. Open page, and see that no archive listings appear, not even without post counts
  4. Re-enable the "Show Count" option
  5. View your page and see that the archive listings are gone forever, no matter what you try

Expected results

Turning "Show Count" off should show the list of months with the post counts removed

Actual results

Archive month list disappears forever. Clearing the cache doesn't help. Must reinstall Grav.

Bug on some pages with children() method

Hello,

After an update, I get a bug when using archives plugin on some pages only. In browser, I get :

Server Error

Sorry, something went terribly wrong!
0 - Call to a member function children() on null
For further details please review your logs/ folder, or enable displaying of errors in your system configuration.

Her is the log :

[2020-08-05 16:56:53] grav.CRITICAL: Call to a member function children() on null - Trace: #0 /user/plugins/archives/archives.php(144): Grav\Plugin\ArchivesPlugin->getArchives(Array, 'and', Array) #1 /vendor/symfony/event-dispatcher/EventDispatcher.php(212): Grav\Plugin\ArchivesPlugin->onTwigSiteVariables(Object(RocketTheme\Toolbox\Event\Event), 'onTwigSiteVaria...', Object(RocketTheme\Toolbox\Event\EventDispatcher)) #2 /vendor/symfony/event-dispatcher/EventDispatcher.php(44): Symfony\Component\EventDispatcher\EventDispatcher->doDispatch(Array, 'onTwigSiteVaria...', Object(RocketTheme\Toolbox\Event\Event)) #3 /vendor/rockettheme/toolbox/Event/src/EventDispatcher.php(23): Symfony\Component\EventDispatcher\EventDispatcher->dispatch('onTwigSiteVaria...', Object(RocketTheme\Toolbox\Event\Event)) #4 /system/src/Grav/Common/Grav.php(403): RocketTheme\Toolbox\Event\EventDispatcher->dispatch('onTwigSiteVaria...', Object(RocketTheme\Toolbox\Event\Event)) #5 /system/src/Grav/Common/Twig/Twig.php(363): Grav\Common\Grav->fireEvent('onTwigSiteVaria...') #6 /system/src/Grav/Common/Service/OutputServiceProvider.php(28): Grav\Common\Twig\Twig->processSite('html') #7 /vendor/pimple/pimple/src/Pimple/Container.php(118): Grav\Common\Service\OutputServiceProvider->Grav\Common\Service{closure}(Object(Grav\Common\Grav)) #8 /system/src/Grav/Common/Processors/RenderProcessor.php(28): Pimple\Container->offsetGet('output') #9 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(45): Grav\Common\Processors\RenderProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #10 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(57): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #11 /system/src/Grav/Common/Processors/DebuggerAssetsProcessor.php(28): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #12 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(45): Grav\Common\Processors\DebuggerAssetsProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #13 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(57): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #14 /system/src/Grav/Common/Processors/PagesProcessor.php(69): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #15 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(45): Grav\Common\Processors\PagesProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #16 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(57): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #17 /system/src/Grav/Common/Processors/TwigProcessor.php(27): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #18 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(45): Grav\Common\Processors\TwigProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #19 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(57): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #20 /system/src/Grav/Common/Processors/AssetsProcessor.php(28): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #21 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(45): Grav\Common\Processors\AssetsProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #22 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(57): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #23 /system/src/Grav/Common/Processors/SchedulerProcessor.php(29): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #24 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(45): Grav\Common\Processors\SchedulerProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #25 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(57): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #26 /system/src/Grav/Common/Processors/BackupsProcessor.php(28): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #27 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(45): Grav\Common\Processors\BackupsProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #28 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(57): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #29 /system/src/Grav/Common/Processors/TasksProcessor.php(59): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #30 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(45): Grav\Common\Processors\TasksProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #31 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(57): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #32 /system/src/Grav/Common/Processors/RequestProcessor.php(52): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #33 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(45): Grav\Common\Processors\RequestProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #34 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(57): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #35 /system/src/Grav/Common/Processors/ThemesProcessor.php(27): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #36 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(45): Grav\Common\Processors\ThemesProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #37 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(57): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #38 /system/src/Grav/Common/Processors/PluginsProcessor.php(30): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #39 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(45): Grav\Common\Processors\PluginsProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #40 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(57): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #41 /system/src/Grav/Common/Processors/InitializeProcessor.php(95): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #42 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(45): Grav\Common\Processors\InitializeProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #43 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(57): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #44 /system/src/Grav/Common/Processors/DebuggerProcessor.php(27): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #45 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(45): Grav\Common\Processors\DebuggerProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #46 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(57): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #47 /system/src/Grav/Common/Processors/ErrorsProcessor.php(27): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #48 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(45): Grav\Common\Processors\ErrorsProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #49 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(57): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #50 /system/src/Grav/Common/Processors/LoggerProcessor.php(48): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #51 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(45): Grav\Common\Processors\LoggerProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #52 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(57): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #53 /system/src/Grav/Common/Processors/ConfigurationProcessor.php(28): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #54 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(45): Grav\Common\Processors\ConfigurationProcessor->process(Object(Nyholm\Psr7\ServerRequest), Object(Grav\Framework\RequestHandler\RequestHandler)) #55 /system/src/Grav/Framework/RequestHandler/Traits/RequestHandlerTrait.php(57): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #56 /system/src/Grav/Common/Grav.php(272): Grav\Framework\RequestHandler\RequestHandler->handle(Object(Nyholm\Psr7\ServerRequest)) #57 /index.php(54): Grav\Common\Grav->process() #58 {main} [] []

Wordpress style post filter

Hello!

It's not an issue, but a question/enhancement.

How to create the same URL and filters for each post in blog?
Post: https://bestblog.wordpress.com/2007/06/13/elle-effect/
Day: https://bestblog.wordpress.com/2007/06/13/
Month: https://bestblog.wordpress.com/2007/06/
Year: https://bestblog.wordpress.com/2007/

Do I need to create 3 level of nested folders? Or maybe if I have folder name 2007-06-13-elle-effect I can do it with redirects or something?

It should work with a multilingual site.

@self filter handling as in simplesearch

First of all: Grav is great. I just started a website for my brother and i'm almost done :). Really love it.

The missing piece now is the archives for the website's news/blog section.

After understanding the code, i realized, that i have to put (according to my filter configuration) a certain taxonomy on every news item (no other filter possible).

So i think this pretty redundant and not as nice as in grav-plugin-simplesearch, where you can put the @self filter on the news listing page to gather child items: https://github.com/getgrav/grav-plugin-simplesearch/blob/develop/simplesearch.php#L142

If you like, i can make a pull request!

Best Regards,
Sebastian

PS: Also wished to have the query params (e.g. archives_year) configurable... don't like underscores in the URL and would prefer a simple year

date_display_format will lead to exception for some format characters

The config option date_display_format is handed over to the PHP date() function, which accepts a certain list of format characters. However, when I tried to change this option to 'Y m', the page will throw an exception:

An exception has been thrown during the rendering of a template ("DateTime::__construct(): Failed to parse time string (2016 06) at position 5 (0): Unexpected character"). 

Which points to plugins/archives/templates/partials/archives.html.twig, line 5.

Also:

  • When using a slightly different string, 'Y-m' (dash between), it works as expected
  • When using Kanji, it will throw an exception again: '年Y月m'

The expected behavior is that any format character/ string, as outlined in the PHP documentation (see above) can be used for this option and no exception is thrown. At the very least, better documentation is needed to understand what format characters can be used or can't be used (and why).

Archive list will only show on /blog pages. Won't show for other pages

I have an "Archive" sidebar item. Any page within the /blog list will show the archive list, but regular pages outside the blog just show a blank area. Here is my config:

enabled: true
built_in_css: true
date_display_format: 'F Y'
show_count: true
limit: 12
taxonomy_names:
    month: archives_month
    year: archives_year
taxonomy_values:
    month: 'M_Y'
    year: 'Y'
#Defaults
order:
    by: date
    dir: desc
filters:
    category: 
filter_combinator: and
#New Page-Specific Configurations
page_specific_config:
    -  route: '/blog'
       order:
           by: date
           dir: desc
       filters:
           page@: '/blog'
       filter_combinator: and

I have tried playing around with the route. The archive links will show up if I leave it blank, but the links themselves just route back to the homepage and not the taxonomy page.

This feels simple, but I keep missing it.

date_display_format: 'Y'

Hi,
when I use "Y" as date_display_format it need to preserve_keys in array_slice function: see row 119. I have made this change:
$archives = array_slice($archives, 0, intval($this->config->get('plugins.archives.limit')), true);

Clear history?

Hi,

I accidentally published a blog post that had a date of October 2020 and now my Archive Plugin displays that, is there anyway of clearing that entry so it doesn’t display?

Thanks,
Sarah

date format and translate

Hi,

how can I translate the months?
its now in English, we want it in the local language

best regards

filter by more categories not working

Hi guys,

when the yaml will include the following syntax, the archives do not work.
Could it be that this may as well be an enhancement in the future?
the code is at follows:

enabled: true
built_in_css: true
date_display_format: 'F Y'
show_count: true
limit: 12
order:
    by: date
    dir: desc
filter_combinator: and
filters:
    category: 
        - blog
        - marturii

if the category is only one (ex: blog) the archives are appearing on the sidebar. if there are 2 or more categories then the archives is empty field with only the header.

not sure if this an issue but this would be a scenario where I could use the archives to show me only specific articles related to specific page collections.

posts in months not displayed together

Hi guys,

Been playing with the Archives for a while now trying to make sure translate is ok. I ran into this little issue as per the picture.
captura de ecran din 2016 05 19 la 14 30 30

this is my configs of archives.yaml in both the plugin/partial, config/archives.yaml and theme/templates/partials/archives in their respective order.

<ul class="archives">

{% for month,items in archives_data %}
    <li>
        <a href="{{ base_url }}/archives_month{{ config.system.param_sep }}{{ month|date('M_Y')|lower|e('url') }}">
        {% if archives_show_count %}
        <span class="label">{{ items|length }}</span>
        {% endif %}
        <span class="archive_date">{{ month }}</span>
        </a>
    </li>
{% endfor %}
</ul>
enabled: true
built_in_css: true
date_display_format: 'F jS Y'
show_count: true
limit: 12
order:
  by: date
  dir: desc
filter_combinator: and
filters:
  category:
    - blog
<ul class="archives">

{% for month, items in archives_data %}
    <li>
        <a href="{{ base_url }}/arhive{{ config.system.param_sep }}{{ month|date('M_Y')|lower|e('url') }}">
        {% if archives_show_count %}
        <span class="label">{{ items|length }}</span>
        {% endif %}
        <span class="archive_date">{{ 'MONTHS_OF_THE_YEAR'|ta(month|date('n') -1) }} {{ month|date('Y') }}</span>
        </a>
    </li>
{% endfor %}
</ul>

Cannot understand where the duplicate month is appearing. Also on the live site the archives are more, as there are more articles. I am sure I must have done something :P just cant figure out what, or maybe it's a bug/issue ?

does this plugin work with subfolders?

Hi,

I have this plugin filtering blog pages under /blog folder. My blog folder is organised with subfolders for each year. Each blog page has blog taxonomy category. However, this plugin doesn't seem to iterate through subfolders. Can anyone advise how to make it work this way?

Only cached site is displayed

Hello,

due to grav caching, only one cached version of the archive page is displayed at a time, no matter what parameters are specified in the URL. It would be necessary to disable caching for the archive pages.

archive plugin and multilanguage support

Hi rhukster

As seen on the forum, I have a problem with the archive plugin since I use multilanguage support. My website is in French, so I declared in admin plugin this language (fr), and only this language. Since this change, when I use the archive plugin, there is no results returned for a year or a month. However, the number of articles showed near the links is correct.

With the archive plus plugin, the problem is the same, except that all articles are returned as results whatever the link for years or months.

Thx
Ludo

Does not work. Missing documentation

I have a multilanguage blog.
The hierachy like this:

/3d-printers type:blog
    page1 fr type:item
    page2 fr type:item


/software blog
    page1 fr type:item
    page2 fr type:item

I've tried both Archive Plus and Archive. Archive Plus displays the items in the blog but Archive does not. Please notice that all item have a category of blog
The configuration for the Archive plugin is:

enabled: true
built_in_css: true
date_display_format: 'F Y'
show_count: true
limit: 12
taxonomy_names:
  month: archives_month
  year: archives_year
order:
  by: date
  dir: desc
filters:
  category: blog
filter_combinator: and

I do see an "Archive" title in the sidebar but without any page listing. With Archive Plus, I get a list of items plus the month.
If I click on a month, it's redirecting to https://mysite.com/fr/archive:déc_2020 (or https://mysite.com/en/archive:dec_2020)
This is nothing to answer for this page, so the "Home" page is returned.

Please notice that I have SimpleSearch plugin and it's working fine to display posts related to the searched item, so the url parsing is working.

I don't know how to:

  1. Get Archive to list my posts (I've also added a page route but I don't understand what to put in there nor what it means).
  2. Get Archive to answer an logical url like https://mysite.com/en/software/archives_month:dec_2020 (if I enter this URL manually it's working, so there is something wrong in between).

Missing blog_list route from links

I did setup 2 separate blogs on site using 2 blog_list pages. Archive plugin missing the blog_list page route in links to archived pages. I solved this with a quick hack. Please check it out.

Added new variable "route" in user/plugins/archives/archives.php

            if ($new_approach) {
                 $collection = $page->children();
+                $this->grav['twig']->twig_vars['route'] = $page->route();
            } else {

Added "route" in user/plugins/archives/templates/partials/archives.html.twig

    	<a href="{{ base_url }}{{ route }}/{{ config.plugins.archives.taxonomy_names.month }}{{ config.system.param_sep }}{{ month|date('M_Y')|lower|e('url') }}">

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.