Coder Social home page Coder Social logo

Comments (15)

joliss avatar joliss commented on July 25, 2024

What version of Rails are you on?

from jquery-ui-rails.

robertleelittleiii avatar robertleelittleiii commented on July 25, 2024

Version 3.1.11

On Tuesday, December 31, 2013, Jo Liss wrote:

What version of Rails are you on?


Reply to this email directly or view it on GitHubhttps://github.com//issues/62#issuecomment-31416133
.

from jquery-ui-rails.

luisalima avatar luisalima commented on July 25, 2024

This is probably caused by the depend_on_asset directive add. However, it has been around for quite some time in sprockets (see this commit ).

from jquery-ui-rails.

robertleelittleiii avatar robertleelittleiii commented on July 25, 2024

FYI: here is the full dump when I tried to do a compile.

It was failing when processing the jquery-ui-rails css files. The error
was cryptic (as you can see below)



Compiling: application.css

rake aborted!

undefined method `dependency_paths' for
#Sprockets::StaticAsset:0x1108e39e0

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/bundled_asset.rb:223:in
`build_dependencies_paths_and_assets'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/bundled_asset.rb:222:in
`each'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/bundled_asset.rb:222:in
`build_dependencies_paths_and_assets'

/usr/local/rvm/rubies/ruby-1.8.7-p370/lib/ruby/1.8/set.rb:195:in `each'

/usr/local/rvm/rubies/ruby-1.8.7-p370/lib/ruby/1.8/set.rb:195:in `each_key'

/usr/local/rvm/rubies/ruby-1.8.7-p370/lib/ruby/1.8/set.rb:195:in `each'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/bundled_asset.rb:217:in
`build_dependencies_paths_and_assets'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/bundled_asset.rb:141:in
`dependency_paths'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/bundled_asset.rb:61:in
`mtime'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/asset.rb:58:in
`send'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/asset.rb:58:in
`encode_with'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/asset.rb:57:in
`each'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/asset.rb:57:in
`encode_with'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/bundled_asset.rb:43:in
`encode_with'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/caching.rb:52:in
`cache_asset'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/index.rb:67:in
`build_asset'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/index.rb:76:in
`memoize'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/index.rb:65:in
`build_asset'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/base.rb:99:in
`find_asset'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/index.rb:48:in
`find_asset'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/base.rb:110:in
`[]'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/bundled_asset.rb:200:in
`build_dependencies_paths_and_assets'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/bundled_asset.rb:194:in
`each'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/bundled_asset.rb:194:in
`build_dependencies_paths_and_assets'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/bundled_asset.rb:141:in
`dependency_paths'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/bundled_asset.rb:61:in
`mtime'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/asset.rb:58:in
`send'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/asset.rb:58:in
`encode_with'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/asset.rb:57:in
`each'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/asset.rb:57:in
`encode_with'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/bundled_asset.rb:43:in
`encode_with'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/caching.rb:52:in
`cache_asset'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/index.rb:67:in
`build_asset'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/index.rb:76:in
`memoize'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/index.rb:65:in
`build_asset'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/trail.rb:102:in
`find_asset_in_path'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/base.rb:101:in
`find_asset'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/index.rb:48:in
`find_asset'

/usr/local/rvm/gems/[email protected]/gems/actionpack-3.1.11/lib/sprockets/static_compiler.rb:23:in
`compile'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/base.rb:151:in
`each_logical_path'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/base.rb:139:in
`each_file'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/base.rb:129:in
`each'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/base.rb:129:in
`each_entry'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/base.rb:137:in
`each_file'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/base.rb:136:in
`each'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/base.rb:136:in
`each_file'

/usr/local/rvm/gems/[email protected]/gems/sprockets-2.0.4/lib/sprockets/base.rb:149:in
`each_logical_path'

/usr/local/rvm/gems/[email protected]/gems/actionpack-3.1.11/lib/sprockets/static_compiler.rb:18:in
`compile'

/usr/local/rvm/gems/[email protected]/gems/actionpack-3.1.11/lib/sprockets/assets.rake:52:in
`internal_precompile'

/usr/local/rvm/gems/[email protected]
/gems/actionpack-3.1.11/lib/sprockets/assets.rake:66

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:236:in
`call'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:236:in
`execute'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:231:in
`each'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:231:in
`execute'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:175:in
`invoke_with_call_chain'

/usr/local/rvm/rubies/ruby-1.8.7-p370/lib/ruby/1.8/monitor.rb:242:in
`synchronize'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:168:in
`invoke_with_call_chain'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:161:in
`invoke'

/usr/local/rvm/gems/[email protected]
/gems/actionpack-3.1.11/lib/sprockets/assets.rake:56

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:236:in
`call'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:236:in
`execute'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:231:in
`each'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:231:in
`execute'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:175:in
`invoke_with_call_chain'

/usr/local/rvm/rubies/ruby-1.8.7-p370/lib/ruby/1.8/monitor.rb:242:in
`synchronize'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:168:in
`invoke_with_call_chain'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:161:in
`invoke'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/application.rb:149:in
`invoke_task'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/application.rb:106:in
`top_level'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/application.rb:106:in
`each'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/application.rb:106:in
`top_level'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/application.rb:115:in
`run_with_threads'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/application.rb:100:in
`top_level'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/application.rb:78:in
`run'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/application.rb:165:in
`standard_exception_handling'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/application.rb:75:in
`run'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/bin/rake:33

/usr/local/rvm/gems/[email protected]/bin/rake:23:in `load'

/usr/local/rvm/gems/[email protected]/bin/rake:23

Tasks: TOP => assets:precompile:primary

rake aborted!

Command failed with status (1):
[/usr/local/rvm/rubies/ruby-1.8.7-p370/bin/...]

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/file_utils.rb:55:in
`create_shell_runner'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/file_utils.rb:45:in
`call'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/file_utils.rb:45:in
`sh'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/file_utils_ext.rb:37:in
`sh'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/file_utils.rb:82:in
`ruby'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/file_utils_ext.rb:37:in
`ruby'

/usr/local/rvm/gems/[email protected]/gems/actionpack-3.1.11/lib/sprockets/assets.rake:9:in
`ruby_rake_task'

/usr/local/rvm/gems/[email protected]/gems/actionpack-3.1.11/lib/sprockets/assets.rake:17:in
`invoke_or_reboot_rake_task'

/usr/local/rvm/gems/[email protected]
/gems/actionpack-3.1.11/lib/sprockets/assets.rake:25

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:236:in
`call'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:236:in
`execute'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:231:in
`each'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:231:in
`execute'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:175:in
`invoke_with_call_chain'

/usr/local/rvm/rubies/ruby-1.8.7-p370/lib/ruby/1.8/monitor.rb:242:in
`synchronize'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:168:in
`invoke_with_call_chain'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/task.rb:161:in
`invoke'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/application.rb:149:in
`invoke_task'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/application.rb:106:in
`top_level'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/application.rb:106:in
`each'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/application.rb:106:in
`top_level'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/application.rb:115:in
`run_with_threads'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/application.rb:100:in
`top_level'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/application.rb:78:in
`run'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/application.rb:165:in
`standard_exception_handling'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/lib/rake/application.rb:75:in
`run'

/usr/local/rvm/gems/[email protected]/gems/rake-10.1.1/bin/rake:33

/usr/local/rvm/gems/[email protected]/bin/rake:23:in `load'

/usr/local/rvm/gems/[email protected]/bin/rake:23

Tasks: TOP => assets:precompile

On Sat, Jan 4, 2014 at 1:41 PM, Luisa Lima [email protected] wrote:

This is probably caused by the depend_on_asset directive add. However, it
has been around for quite some time in sprockets (see this commithttps://github.com/sstephenson/sprockets/commit/54be242d953408b21aac0516f127c66661d5950b#diff-e60859964c6cb1e6a6e0152813a69e7c).


Reply to this email directly or view it on GitHubhttps://github.com//issues/62#issuecomment-31585255
.

from jquery-ui-rails.

joliss avatar joliss commented on July 25, 2024

Thanks @robertleelittleiii!

Yes, git diff v4.1.0..v4.1.1 app/ shows the only thing that changed is the added depend_on_asset.

I can reproduce it with this script:

#!/bin/bash

set -e

# eval "`rbenv init -`" # uncomment if you use rbenv
rm -rf testapp
gem uninstall -a -I -x rails
gem install rails -v 3.1.12 # 3.2.0 works as well
# rbenv rehash # uncomment if you use rbenv
rails new testapp
cd testapp
echo 'gem "jquery-ui-rails", "4.1.1"' >> Gemfile
bundle install
echo '/*= require jquery.ui.theme */' >> app/assets/stylesheets/application.css
rails generate controller home welcome
perl -pi -e 's/^end/  root :to => "home#welcome"\nend/' config/routes.rb
rm public/index.html
rails server

What do we do about Rails 3.x compatibility? Is there a way we can make it work, or should we depend on '~> 4.0' so that Rails 3.x gets only jquery-ui-rails 4.1.0?

from jquery-ui-rails.

joliss avatar joliss commented on July 25, 2024

Also cc @schneems; see above. The tl;dr is, adding depend_on_asset breaks Rails 3.x compatibility.

from jquery-ui-rails.

luisalima avatar luisalima commented on July 25, 2024

Actually, no, it depends on the version of sprockets, so I think that we
should look at the version of sprockets instead of the rails version…
What's puzzling me is that this has been in sprockets since 2011, according
to the commit I pasted above.

By default (ie if you don't upgrade Sprockets) I believe that it breaks
Rails 3.1 compatibility, not Rails 3.2 compatibility. I am running Rails
3.2.16, for example, and I need gems to declare external dependencies with
depends_on_asset otherwise I get errors.

On Sat, Jan 4, 2014 at 7:25 PM, Jo Liss [email protected] wrote:

Also cc @schneems https://github.com/schneems; see above. The tl;dr is,
adding depend_on_asset breaks Rails 3.x compatibility.


Reply to this email directly or view it on GitHubhttps://github.com//issues/62#issuecomment-31586323
.

Luísa Lima
http://www.dcc.fc.up.pt/~luisalima

from jquery-ui-rails.

joliss avatar joliss commented on July 25, 2024

Yes, Rails 3.1.0 depends on Sprockets ~> 2.0.0, which contains sstephenson/sprockets@54be242. It seems like this is error is not because Sprockets doesn't support depend_on_asset; rather, something is going wrong internally.

As far as I see depend_on_asset is not strictly needed with plain Rails 4.0.2 -- try running the testapp on the rails-4.0.2 branch I just pushed. @schneems, for what it's worth, I can't get sprockets_better_errors to actually complain (see the sprockets_better_errors branch).

I continue to believe that the error that sprockets_better_errors is reported to throw is over-eager, and depend_on_asset is not actually needed for a file supplied by an external gem.

So in order to avoid breaking Rails 3.1 compatibility, I'd suggest we revert 09668f5. What do you think?

from jquery-ui-rails.

luisalima avatar luisalima commented on July 25, 2024

@joliss in that case I'd keep 09668f5 in a branch so that people have a choice, because not having "depend_on_asset" breaks my app, at least, and I think I'm not the only one - I saw more problems reported with other external gems elsewhere (and I also had a problem with another external gem). Since this is supposed to be the standard in sprockets from now onwards according to @schneems, we'd have a middle ground: if someone runs into trouble with sprockets, they can just use another branch.

On Jan 11, 2014, at 3:59 PM, Jo Liss [email protected] wrote:

Yes, Rails 3.1.0 depends on Sprockets ~> 2.0.0, which contains sstephenson/sprockets@54be242. It seems like this is not because Sprockets doesn't support depend_on_asset; rather, something is going wrong internally.

As far as I see depend_on_asset is not strictly needed with plain Rails 4.0.2 -- try running the testapp on the rails-4.0.2 branch I just pushed. @schneems, for what it's worth, I can't get sprockets_better_errors to actually complain (see the sprockets_better_errors branch).

I continue to believe that the error that sprockets_better_errors is reported to throw is over-eager, and depend_on_asset is not actually needed for a file supplied by an external gem.

So in order to avoid breaking Rails 3.1 compatibility, I'd suggest we revert 09668f5. What do you think?


Reply to this email directly or view it on GitHub.

from jquery-ui-rails.

joliss avatar joliss commented on July 25, 2024

@luisalima We can if we want to. I'm curious though, what exactly is causing the breakage in your app? Do you have the sprockets_better_error gems installed, either directly or via a dependency? (You can look at Gemfile.lock to figure this out.)

from jquery-ui-rails.

luisalima avatar luisalima commented on July 25, 2024

Hi @joliss,
I do have the sprockets_bettter_errors gem installed because it's very useful for people who use heroku ;) but @schneems said that the latest version of sprockets will raise the same error now (with or without the better_errors gem). I can give it a try in my app tomorrow, I'm not near a computer now. In any case, if it prevents sprockets-related problems, with or without the sprockets_better_errors gem, I'm for keeping this in a branch, because it's one of the worse types of debugging that we can do in rails, IMHO :)

On Jan 11, 2014, at 5:22 PM, Jo Liss [email protected] wrote:

@luisalima We can if we want to. I'm curious though, what exactly is causing the breakage in your app? Do you have the sprockets_better_error gems installed, either directly or via a dependency? (You can look at Gemfile.lock to figure this out.)


Reply to this email directly or view it on GitHub.

from jquery-ui-rails.

schneems avatar schneems commented on July 25, 2024

So you know sprockets_better_errors is in Rails 4.1.0 master and is intended to go out with the RC. I would like to figure out a way to remain backwards compatible. Can you give me the error we get when you use this command on Rails 3 ?

from jquery-ui-rails.

joliss avatar joliss commented on July 25, 2024

@schneems See my shell script above. It reproduces it with Rails 3.1.

from jquery-ui-rails.

schneems avatar schneems commented on July 25, 2024

Sorry for the delay here, i've looked into this issue quite a bit and I don't think it can be fixed from Rails master or sprockets_better_errors. The problem comes from sprockets 2.0 differentiating between "static" and "bundled" assets, and only a "bundled" asset can understand that declaration even though all assets should be able to. To fix we would actually have to fix in sprockets and backport which doesn't solve the problem for those with older sprockets dependencies, it's also not going to happen.

We could theoretically monkey patch a fix in (adding that method to Static assets) but as this issue only affects Rails 3.1.0 users, I don't think that patch would make it into Rails master, it's also pretty hacky.

It may not sound great, but if I was maintaining this gem, I would likely rev a minor version number and drop support for 3.1.x. The first release came out in 2011 and last release was version 3.1.12 almost a year ago. Not only does Rails not support 3.1, they no longer actively develop 3.2.

If you want some more conversation from some more voices, you can open a ticket on the sprockets-rails repo and link back to this issue as well as comment. maybe @guillermo could chime in here as well.

from jquery-ui-rails.

joliss avatar joliss commented on July 25, 2024

Thanks @schneems, that sounds quite reasonable.

I just re-released the last version compatible with Rails 3.1 (jquery-ui-rails 4.1.0) as 4.1.2. This will be the last version supporting Rails 3.1.

I then updated the dependency to Rails >=3.2.16 and pushed 4.2.0.

@robertleelittleiii If you run bundle update in your Rails 3.1 app, it should automatically pick the last working version (4.1.2). It should work alright with 4.1.2. Can you please let me know if this works or if there are any problems?

Everyone, if undefined method 'dependency_paths' or a similar error message comes back in any Rails version with up-to-date jquery-ui-rails, please let me know.

from jquery-ui-rails.

Related Issues (20)

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.