forked from TheKidCoder/haml_coffee_assets
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 11b2527
Showing
21 changed files
with
1,657 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
pkg/* | ||
doc/* | ||
*.gem | ||
*.rbc | ||
.*.swp | ||
*.bak | ||
.bundle | ||
.yardoc | ||
.rbx | ||
.rvmrc | ||
Gemfile.lock | ||
|
||
## MAC OS | ||
.DS_Store | ||
.Trashes | ||
.com.apple.timemachine.supported | ||
.fseventsd | ||
Desktop DB | ||
Desktop DF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
rvm: | ||
- 1.8.7 | ||
- 1.9.2 | ||
- ree | ||
- jruby | ||
branches: | ||
only: | ||
- master | ||
notifications: | ||
recipients: | ||
- michi@netzpiraten.ch |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
--title 'Haml CoffeeScript Assets Documentation' | ||
--readme README.md | ||
--markup markdown | ||
--markup-provider redcarpet | ||
--private | ||
--protected | ||
--output-dir ./doc | ||
lib/**/*.rb | ||
- | ||
LICENSE |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
# coding: UTF-8 | ||
|
||
source "http://rubygems.org" | ||
|
||
gemspec | ||
|
||
platform :ruby do | ||
gem 'therubyracer', '~> 0.9.8' | ||
end | ||
|
||
platform :jruby do | ||
gem 'therubyrhino', '~> 1.72.8' | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
# coding: UTF-8 | ||
|
||
guard 'rspec' do | ||
watch(%r{^spec/.+_spec\.rb$}) | ||
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{ m[1] }_spec.rb" } | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
Copyright (c) 2011 Michael Kessler <michi@netzpiraten.ch> | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in | ||
all copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
THE SOFTWARE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,260 @@ | ||
# HamlCoffeeAssets [](http://travis-ci.org/netzpirat/haml_coffee_assets) | ||
|
||
HamlCoffeeAssets compiles [Haml CoffeeScript](https://github.com/9elements/haml-coffee) templates in the Rails 3.1 asset | ||
pipeline. | ||
|
||
Tested on MRI Ruby 1.8.7, 1.9.2, REE and the latest versions of JRuby. | ||
|
||
## HamlCoffee | ||
|
||
HamlCoffee allows you to write inline [CoffeeScript](http://jashkenas.github.com/coffee-script/) in your | ||
[HAML](http://haml-lang.com/) template: | ||
|
||
```haml | ||
#cart | ||
%h2= I18n.t('js.cart.title') | ||
- if @cart.length == 0 | ||
%p.empty= I18n.t('js.cart.empty') | ||
- else | ||
%ul | ||
- for item in @cart | ||
%li | ||
.item | ||
= item.name | ||
%a{ :href => "/cart/item/remove/#{ item.id }" } | ||
= I18n.t('js.cart.item.remove') | ||
``` | ||
|
||
## Installation | ||
|
||
The simplest way to install Guard is to use [Bundler](http://gembundler.com/). | ||
Add `haml_coffee_assets` and `execjs` to your `Gemfile`: | ||
|
||
```ruby | ||
group :assets do | ||
gem 'haml_coffee_assets' | ||
gem 'execjs' | ||
end | ||
``` | ||
|
||
And require the `haml_coffee_assets.js` in your `application.js.coffee` | ||
|
||
```coffeescript | ||
#= require haml_coffee_assets | ||
``` | ||
|
||
### JavaScript runtimes | ||
|
||
HamlCoffeeAssets uses [ExecJS](https://github.com/sstephenson/execjs) to pick the best runtime to evaluate the | ||
CoffeeScript and generate the JavaScript template. | ||
|
||
* With CRuby you want to use a V8 JavaScript Engine or Mozilla SpiderMonkey. | ||
* With JRuby you want to use the Mozilla Rhino. | ||
* On Mac OS X you want to use Apple JavaScriptCore. | ||
* On Linux or as a node.js developer you want to use Node.js (V8). | ||
* On Windows you want to use Microsoft Windows Script Host. | ||
|
||
The following sections gives you a short overview of the available JavaScript runtimes and how to install it. | ||
|
||
### Node.js (V8) | ||
|
||
You can install [node.js](http://nodejs.org/) and use its V8 engine. On OS X you may want to install it with | ||
[Homebrew](http://mxcl.github.com/homebrew/), on Linux with your package manager and on Windows you have to download and | ||
install the [executable](http://www.nodejs.org/#download). | ||
|
||
### V8 JavaScript Engine | ||
|
||
To use the [V8 JavaScript Engine](http://code.google.com/p/v8/), simple add `therubyracer` to your `Gemfile`. | ||
The Ruby Racer acts as a bridge between Ruby and the V8 engine, that will be automatically installed by the Ruby Racer. | ||
|
||
```ruby | ||
group :development do | ||
gem 'therubyracer' | ||
end | ||
``` | ||
|
||
Another alternative is [Mustang](https://github.com/nu7hatch/mustang), a Ruby proxy library for the awesome Google V8 | ||
JavaScript engine. Just add `mustang` to your `Gemfile`: | ||
|
||
```ruby | ||
group :development do | ||
gem 'mustang' | ||
end | ||
``` | ||
|
||
### Mozilla SpiderMonkey | ||
|
||
To use [Mozilla SpiderMonkey](https://developer.mozilla.org/en/SpiderMonkey), simple add `johnson` to your `Gemfile`. | ||
Johnson embeds the Mozilla SpiderMonkey JavaScript runtime as a C extension. | ||
|
||
```ruby | ||
group :development do | ||
gem 'johnson' | ||
end | ||
``` | ||
|
||
### Mozilla Rhino | ||
|
||
If you're using JRuby, you can embed the [Mozilla Rhino](http://www.mozilla.org/rhino/) runtime by adding `therubyrhino` | ||
to your `Gemfile`: | ||
|
||
```ruby | ||
group :development do | ||
gem 'therubyrhino' | ||
end | ||
``` | ||
|
||
### Apple JavaScriptCore | ||
|
||
[JavaScriptCore](http://developer.apple.com/library/mac/#documentation/Carbon/Reference/WebKit_JavaScriptCore_Ref/index.html) | ||
is Safari's Nitro JavaScript Engine and only usable on Mac OS X. You don't have to install anything, because | ||
JavaScriptCore is already packaged with Mac OS X. | ||
|
||
### Microsoft Windows Script Host | ||
|
||
[Microsoft Windows Script Host](http://msdn.microsoft.com/en-us/library/9bbdkx3k.aspx) is available on any Microsoft | ||
Windows operating systems. | ||
|
||
## Usage | ||
|
||
You should place all your HamlCoffee templates in the `app/assets/templates` directory and include all templates in | ||
your `application.js.coffee`: | ||
|
||
```coffeescript | ||
#= require_tree ../templates | ||
``` | ||
|
||
Now you can start to add your HamlCoffee templates to your template directory. Make sure all your templates have a | ||
`.hamlc` extension to be recognized by HamlCoffeeAssets. | ||
|
||
**Note:** HamlCoffee already generates a JavaScript Template, so there is not need to pass it to the `JST` Sprocket | ||
processor by using `.jst.hamlc` as extension, and if you do, the HamlCoffee templates will not work. | ||
|
||
## Configuration | ||
|
||
### Template namespace | ||
|
||
By default all HamlCoffee templates are registered under the `JST` namespace. | ||
|
||
Example: | ||
|
||
A template located in `app/assets/templates/header.hamlc` with the given content: | ||
|
||
```haml | ||
%header | ||
%h2= title | ||
``` | ||
|
||
will be accessible in your browser as `JST.header`. You can now render the precompiled template with: | ||
|
||
```javascript | ||
JST.header.render({ title: 'Hello HamlCoffee' }) | ||
``` | ||
|
||
If you prefer another namespace, you can set it in your `application.rb`: | ||
|
||
```ruby | ||
config.hamlcoffee.namespace = 'HAML' | ||
``` | ||
|
||
### Escaping | ||
|
||
By default your code block in your HamlCoffee template will be escaped through the `HAML.escape` function that is | ||
provided in the `haml_coffee_assets.js`. | ||
|
||
You can set another escaping function in your `application.rb`: | ||
|
||
```ruby | ||
config.hamlcoffee.escape = 'App.myEscape' | ||
``` | ||
|
||
or disable escaping completely: | ||
|
||
```ruby | ||
config.hamlcoffee.escape = false | ||
``` | ||
|
||
Your custom escape function must take the unescaped text as parameter and returns the escape function. | ||
The following example implements only ampersand escaping: | ||
|
||
```coffeescript | ||
App.myEscape = (text) -> text.replace(/&/g, '&') | ||
``` | ||
|
||
### Global Context | ||
|
||
HamlCoffeeAssets allows you to configure a global context function that gets merged into the local template context for | ||
each template. | ||
|
||
There is a example implementation provided in the `haml_coffee_assets.js` that uses the `extend` function | ||
from these frameworks: | ||
|
||
* jQuery | ||
* Underscore.js | ||
* Prototype | ||
* MooTools | ||
* Zepto.js | ||
|
||
If you use one of these, than you can simply override `HAML.globals` and return the global HAML context object: | ||
|
||
```coffeescript | ||
HAML.globals = -> | ||
{ | ||
authenticated: App.isAuthenticated() | ||
isAdmin: App.currentUser.hasRole('admin') | ||
} | ||
``` | ||
|
||
If you like to use your own implementation, simply configure your context function in your `application.rb`: | ||
|
||
```ruby | ||
config.hamlcoffee.context = `App.globalTemplateContext` | ||
``` | ||
|
||
or disable the global context completely: | ||
|
||
```ruby | ||
config.hamlcoffee.context = false | ||
``` | ||
|
||
Your custom context function must take the local context as parameter and returns the merged context function. | ||
The following example implementation used the _.underscore extend function to merge an inline defined global | ||
context: | ||
|
||
```coffeescript | ||
App.globalTemplateContext = (locals) -> _.extend({}, { | ||
authenticated: App.isAuthenticated() | ||
}, locals) | ||
``` | ||
|
||
## Acknowledgement | ||
|
||
* [Jeremy Ashkenas](http://twitter.com/#!/jashkenas) for CoffeeScript, that little language that compiles into | ||
JavaScript. | ||
* The people at [9elements](https://github.com/9elements) who gave us | ||
[haml-coffee](https://github.com/9elements/haml-coffee), an elegant JavaScript template solution. | ||
|
||
## License | ||
|
||
(The MIT License) | ||
|
||
Copyright (c) 2011 Michael Kessler | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining | ||
a copy of this software and associated documentation files (the | ||
'Software'), to deal in the Software without restriction, including | ||
without limitation the rights to use, copy, modify, merge, publish, | ||
distribute, sublicense, and/or sell copies of the Software, and to | ||
permit persons to whom the Software is furnished to do so, subject to | ||
the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be | ||
included in all copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, | ||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | ||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | ||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | ||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
# coding: UTF-8 | ||
|
||
require 'bundler' | ||
Bundler::GemHelper.install_tasks | ||
|
||
require 'rspec/core/rake_task' | ||
RSpec::Core::RakeTask.new(:spec) | ||
task :default => :spec | ||
|
||
namespace(:spec) do | ||
desc 'Run all specs on multiple ruby versions (requires rvm)' | ||
task(:portability) do | ||
travis_config_file = File.expand_path("../.travis.yml", __FILE__) | ||
begin | ||
travis_options ||= YAML::load_file(travis_config_file) | ||
rescue => ex | ||
puts "Travis config file '#{ travis_config_file }' could not be found: #{ ex.message }" | ||
return | ||
end | ||
|
||
travis_options['rvm'].each do |version| | ||
system <<-BASH | ||
bash -c 'source ~/.rvm/scripts/rvm; | ||
rvm #{ version }; | ||
ruby_version_string_size=`ruby -v | wc -m` | ||
echo; | ||
for ((c=1; c<$ruby_version_string_size; c++)); do echo -n "="; done | ||
echo; | ||
echo "`ruby -v`"; | ||
for ((c=1; c<$ruby_version_string_size; c++)); do echo -n "="; done | ||
echo; | ||
RBXOPT="-Xrbc.db" bundle install; | ||
RBXOPT="-Xrbc.db" bundle exec rspec spec -f doc 2>&1;' | ||
BASH | ||
end | ||
end | ||
end |
Oops, something went wrong.