I'm using (Ruby-based) Middleman as a front-end site compiler and I want to get build timestamps in my SCSS and JS. I found this solution to add timestamps to SCSS: Add timestamps to compiled sass/scss
Is there an equivalent for JavaScript compiled using Sprockets?
Yes.
Sprockets provides an ERB engine for preprocessing assets using embedded Ruby code. Append .erb to a CSS or JavaScript asset's filename to enable the ERB engine.
Sprockets processes multiple engine extensions in order from right to left, so you can use multiple engines with a single asset. For example, to have a CoffeeScript asset that is first preprocessed with ERB, use the extension .js.coffee.erb
(The above is from the Sprockets README)
For example, if you have a file hello.js.coffee.erb then you can put this in it:
<%= Time.now.utc.to_s %>
Related
I have two Javascript files. I have some Kotlin code that generates a Javascript file. I also have a file (call it file.js) that depends on the generated javascript file from Kotlin.
Is there a way for me to include file.js in the Kotlin generated Javascript file using Gradle? Is there a setting that can append resource Javascript files into the generated output?
My motivation is to slowly transition my Javascript project into Kotlin, and due to the structure of the project, I cannot create a module. Just want to know if it is possible to do this and how.
You can use Gradle's Ant integration for that. Here's an example from Gradle forums:
task concat(type: SourceTask) {
source 'src'
include '**/*.txt'
outputs.file new File(buildDir, "full.txt")
doLast {
ant.concat(destfile: outputs.files.singleFile) {
source.addToAntBuilder(ant, 'fileset', FileCollection.AntType.FileSet)
}
}
}
This will concatenate a bunch of files into a single full.txt file - adapt it to your specific case and have the task execute prior to assembling your final build artifact.
I have to say that for Javascript builds Gradle's integration with tools like Gulp and Grunt (via plugins) may be an even better match for you - those tools can naturally handle simple JS file concatenation, but they also offer many more tasks useful for working with web technologies.
I'm planing to create a simple Ruby gem. The functionality is depending on some .js files. My plan is to install the gem via Github.
My questions are:
should I write a generator to copy the js files?
what is the best place to keep the js files (is it vendor/assets/javascripts?)
how to write test cases for this (rspec2) ?
I'm using Rails > 3, Ruby 1.9.x and Ruby 2.x.
We can easily use Javascripts library in ruby in following way -
1) We can put all js libararies in Vendor section and for their use
we can define then application.js in following way
//= require datatable-pagination
.
.
2) Next if you want to use your own javascript then u put them into
your assets folder and use then application.js in above way.
3) And if you want to make your own js library, then you can put
your js libarary in lin folder.
I want to use a JavaScript library such as a jQuery plugin. Do I use the Rails asset pipeline? Or should I include it with a javascript_include_tag? What are my options and what is the recommended practice?
Will you use the JavaScript library on only a few pages or throughout the application? If you will use it throughout the application, use the asset pipeline by adding it to the vendor/assets/javascripts folder. If you plan to use the library on a single page, use the javascript_include_tag.
Here are rules of thumb to guide your use of JavaScript in Rails:
Logically organize your site-wide scripts in the app/assets/javascripts/ folder.
Copy external JavaScript libraries (such as jQuery plugins) to the vendor/assets/javascripts folder.
List site-wide scripts in the app/assets/javascripts/application.js manifest.
Let the Rails asset pipeline combine them all in one minimized application.js file.
For scripts that are used on a few pages that have few visits, load as page-specific JavaScript.
Put page-specific JavaScript in the lib/assets/javascripts folder.
For page-specific JavaScript, use <%= yield(:head) %> in the application layout and <% content_for :head ... %> in the view.
For a full explanation with all the details, see my article:
Including External JavaScript Files in Rails
To access Javascript on a single file, javascript_include_tag is the best option.
With that what you can do is too add 'Rails.application.config.assets.precompile += %w( yourfilename.js )' to your 'config/initializers/assets.rb' file.
In Haml
= javascript_include_tag "example"
To load the file assets/javascripts/example.js
Currently there is this in my <head>
<%= javascript_include_tag 'jquery-1.6.3.min', 'jquery.form', 'jquery.validate', 'script', :concat => true %>
This means Rails produces an all.js File with all js-files combined in it.
Is there some way in Rails to also minify or compress the js files? I mean like getting rid of comments, whitespace, whatever a js compressor typically does. I'm just curious because with an automated compression like this I wouldn't have to manually compress the js files each time I change something.
Any ideas on that?
You could do that using sprockets (by default in Rails 3.1+) or jammit
This will sound like a stupid question for most but I'm really having problems with adding JavaScript files (such as jquery) to my application.html.erb, if I have the jquery first then the rails JavaScript doesn't work correctly. what's the best way to include all JavaScript files to the application.html.erb from my JavaScript folder?
Edit: how can I have Jquery and Prototype run side by said in my rails 3 application? what should my application.html.erb code look like?
If you want to use jQuery and Prototype side-by-side, you should order your javascript include statements as follows:
<%= javascript_include_tag :defaults, "jquery.min", "jquery-ui.min" %>
<script type="text/javascript">
jQuery.noConflict();
</script>
Note: After doing this, you will not be able to access any jQuery methods using $(...). Instead, you'll need to use jQuery(...)
However, if you don't need Prototype, delete your prototype.js file and install the proper jQuery-specific rails.js file (the one that Rails uses by default is Prototype-specific). See https://github.com/rails/jquery-ujs for instructions.
Create new project skip prototype with -J:
rails new -J test -d mysql
Modify the Gemfile, add JQuery:
gem 'jquery-rails'
Bundle update:
bundle update rails
Generator the JQuery, --ui means withe JQuery UI:
rails generate jquery:install --ui
Modify the config/application.rb:
config.action_view.javascript_expansions[:defaults] = %w(jquery jquery-ui rails application)