/frontcompiler

JavaScript/CSS/HTML sources compiler

Primary LanguageRubyMIT LicenseMIT

Welcome!
========

FrontCompiler is a simple collection of compactors for the JavaScript,
CSS and HTML source code. It removes trailing whitespaces, comments and
transformates the local variables to make the sourcecode shorter.

For JavaScript, it can create a more compressed self-building script
for your code, see the description below.

The library can be used as a plugin for rails. See description below.


RubyGem and Console tool
========================

FrontCompiler is available as a rubygem at rubygems.com

gem install front-compiler

With the rubygem you'll have a console tool called 'frontcc'

$ frontcc file0.js file1.js file2.js file3.js



Basic Usage
===========

It's pretty simple

@c = FrontCompiler.new

@compact_js = @c.compact_js(File.read('src/something.js'));
@compact_css = @c.compact_css(File.read('src/something.css'));
@compact_html = @c.compact_html(File.read('src/something.css'));

or shorter

@compact_js = @c.compact_file('src/something.js');
@compact_css = @c.compact_file('src/something.css');
@compact_html = @c.compact_file('src/something.css');

or you can compact several files at once like that

@library_code = @c.compact_files(%w{
  src/lib.js
  src/lib/something.js
  src/lib/another.js
})

Same for the other file-types

CSS Inlining
============

With the tool you can convert your css source in some javascript
definition so you could put the styles in the same file as your
javascript and have -1 (or several) hits to your sever.

File('public/javascripts/all_in_one.js', 'w') do |file|
  file.write @c.compact_files(%w{
    public/javascripts/prototype.js
    public/javascripts/effects.js
    public/javascripts/application.js
  })

  file.write @c.inline_css(
    File.open('public/stylesheets/application.css').read
  )
end

Now you have a single javascript file which contains both, javascript
and the application stylesheets in one.

NOTE: if the user have JavaScript switched off, then he won't see the
styles.

Nested CSS Handling
===================

Nested CSS is a feature when you describe your css with nested constructions
like that

div.article {
  div.title {
    font-weight: bold;
    span.date {
      color: pink;
    }
  }
  div.text {
    background: #EEE;
  }
}

Which means the same as the following code.

div.article div.title {
  font-weight: bold;
}
div.article div.title span.date {
  color: pink
}
div.article div.text {
  background: #EEE;
}

Nested styles are more clean, simple and follows the DRY principle. The only
little problem, there's no browsers which support the feature yet. But the idea
is alive and people like it. So we have added the feature emulation in the
project.

You can create nested css descriptions and then when you compress your css
with FrontCompiler, it will be automatically converted in a correct css source
which the browsers can understand.


Rails Usage
===========

The project can be used as a usual rails plugin. Just clone the
project into your vendor/plugins/front_compiler directory and you will
have the following methods aviable both in your controllers and
templates


* compact_files(list) - compacts the files fromt the given list and
                        puts them in a single string. You can specify
                        a list of file-names here.

* compact_file(file)  - compacts the given file (can be a file-name)

* compact_js(source)  - returns compacted version of the given source
* compact_css(source)
* compact_html(source)

* inline_css(source)    - converts the css-source in javascript
* inline_css_file(file) - converts the given css-file in a javascript
                          source (can be a file-name)


Self-Build Scripts
==================

FrontCompiler provides you another nice feature, the scripts self-building.
The idea is that it will convert your code into a string, replace all long
tokens by short replacements and then compile a javascript code which will
replace all the tokens back on the user's browser side.

This will give you extra 20-40% compression over the existing FrontCompiler
compression.

The browser side restoration happens pretty quick and almost invisible for
the end user.

As the feature actually change the code and requires the end script to be
executed with JavaScript, it won't work if you use JSON as a media format
without actual evaluating it as a javascript code. For this reason, to use
the feature, you need to call it specifically.

@c = FrontCompiler.new
@c.compact_js(File.read('src/something.js').create_self_build;

If you want FrontCompiler to create self-builds by default you can just
uncomment the call in the java_script.rb file.


Enjoy!

--
The code released under terms of the MIT License
Copyright (C) 2008-2010 Nikolay V. Nemshilov aka St.