Использование HAML с пользовательскими фильтрами - PullRequest
2 голосов
/ 29 декабря 2010

Я очень взволнован по поводу HAML и CoffeeScript и работаю над учебным пособием, показывающим, как использовать их в среде без Rails.Итак, у haml есть простая в использовании утилита командной строки

haml input.haml output.html.

И, что здорово, существует проект (один из многих форков: https://github.com/aussiegeek/coffee-haml-filter), направленный на предоставление настраиваемого фильтра, который преобразует CoffeeScriptв JS внутри файлов HAML. К сожалению (или я что-то упустил?) haml не позволяет указывать пользовательские фильтры в командной строке или с каким-либо файлом конфигурации.

I (не фанат Ruby или даже незнающийему достаточно) удалось решить его (основываясь на каком-то умном предложении где-то на SO) с помощью этого вспомогательного скрипта: haml.rb

require 'rubygems'
require 'active_support/core_ext/object/blank'
require 'haml'
require 'haml/filters/coffee'

template = ARGV.length > 0 ? File.read(ARGV.shift) : STDIN.read
haml_engine = Haml::Engine.new(template)
file = ARGV.length > 0 ? File.open(ARGV.shift, 'w') : STDOUT
file.write(haml_engine.render)
file.close

Что довольно просто, за исключением требований в начале.

Теперь возникают вопросы:

1) действительно ли я должен его использовать или есть другой способ компиляции HAML в HTML по требованию с пользовательскими фильтрами?

2) Как насчетHAML режим просмотра?Это здорово и удобно.Конечно, я могу создать скрипт опроса в python, который будет следить за изменениями в каталоге и вызывать этот скрипт .rb, но он выглядит как грязное решение.

В дополнение к ответу отХейкки , мое решение следующее: https://gist.github.com/759002

Не стесняйтесь использовать, если вы найдете это полезным

Ответы [ 3 ]

3 голосов
/ 29 апреля 2011

Хорошая новость: появился новый фильтр CoffeeScript Haml, который разработан для работы независимо от Rails!

https://github.com/paulnicholson/coffee-filter

Определенно рекомендуется для фильтра coffee-haml-фильтра, который никогда активно не поддерживался.

1 голос
/ 29 декабря 2010

Параметр --require / -r должен работать для загрузки фильтра CoffeeScript. Это не в самой последней версии, но это ошибка; это будет исправлено в следующем выпуске.

0 голосов
/ 29 декабря 2010

1) Я бы сказал, да. (Мне не повезло с параметрами командной строки)

2) Этот пример работает с фильтром сценариев кофе. Просмотр файлов осуществляется с помощью fssm gem . Он рекурсивно отслеживает изменения в файлах HAML во входной папке и выводит их в выходную папку с расширением .html.

watch.rb:

require 'rubygems'
require 'fssm'
require 'haml'
require 'coffee-haml-filter'
require 'active_support/core_ext/object/blank'

def render(input_dir, output_dir, relative)
  input_path = File.join(input_dir, relative)
  output_path = File.join(output_dir, relative).gsub(/\.haml$/, ".html")
  haml_engine = Haml::Engine.new(File.read(input_path))
  puts "Rendering #{input_path} -> #{output_path}"
  FileUtils.makedirs(File.dirname(output_path))
  File.open(output_path, 'w') do |file|
    file.write(haml_engine.render)
  end
end

input_dir = File.expand_path(ARGV.length > 0 ? ARGV.shift : '.')
output_dir = File.expand_path(ARGV.length > 0 ? ARGV.shift : input_dir)

puts "Input folder:  '#{input_dir}'"
puts "Output folder: '#{output_dir}'"

FSSM.monitor(input_dir, '**/*.haml') do
  create {|base, relative| render(input_dir, output_dir, relative) }
  update {|base, relative| render(input_dir, output_dir, relative) }
  delete {|base, relative|
    output_path = File.join(output_dir, relative).gsub(/\.haml$/, ".html")
    puts "Deleting #{output_path}"
    File.delete(output_path)
  }
end

Использование:

ruby watch.rb input_folder output_folder
...