2009-06-08 10 views
18

Używam staticmatic dla szablonów, których używam później z PHP. Istnieje dziwna sytuacja, w której niektóre atrybuty tagów mają pojedyncze cudzysłowy, a niektóre mają podwójne cudzysłowy. Chciałbym wszystkie z nich mają podwójne cudzysłowy wyłącznie (! to nie ma znaczenia jak sądzę, ale chcę je tak)Haml - jak zmusić atrybuty tagów do używania tylko podwójnych cudzysłowów I jak zamawiać atrybuty tagów tak, jak bym nie chciał?

Na przykład, kod haml:

!!! XML 
%html{html_attrs('hr-HR')} 
    %head 
    %title Some title 
    %meta{'http-equiv' => 'Content-Type', :content => 'text/html; charset=utf-8'}/ 
    %meta{'name' => "description", :content => 'Some title - YO!'}/ 
    = stylesheets 
    = javascripts('test', :other) 
    %body 
    = yield 

produkuje następujące:

<?xml version='1.0' encoding='utf-8' ?> 
<html lang='hr-HR' xml:lang='hr-HR' xmlns='http://www.w3.org/1999/xhtml'> 
    <head> 
    <title>Some title</title> 
    <meta content='text/html; charset=utf-8' http-equiv='Content-Type' /> 
    <meta content='Some title - YO!' name='description' /> 
    <link href="stylesheets/application.css" media="all" rel="stylesheet" type="text/css"/><link href="stylesheets/grid.css" media="all" rel="stylesheet" type="text/css"/><link href="stylesheets/text.css" media="all" rel="stylesheet" type="text/css"/> 
    <script language="javascript" src="javascripts/test.js" type="text/javascript"></script><script language="javascript" src="javascripts/other.js" type="text/javascript"></script> 

    </head> 
    <body> 
    <h1>some body stuff!</h1> 
    utf test šđčćž ŠĐČĆŽ 
    </body> 
</html> 

Zwróć uwagę, że nie ma znaczenia, czy używam pojedynczych cudzysłowów lub podwójnych cudzysłowów w kodzie szydełkowym, zawsze otrzymuję to samo wyjście!

Wydaje się również, że haml-> html sortuje alfabetycznie atrybuty tagów, a nie sposób, w jaki je zamówiłem w haml. Podejrzewam, że ma to coś wspólnego z tablicami ruby, ale nie jestem pewien, ponieważ nie mogę/nie mogę używać Rubiego poza hamlem w statycznym. Jak mogłem zlecić ich zamówienie tak samo, jak zamówiłem je w tablicy ruby ​​w kodeksie Haml?

Odpowiedz

28

Spróbuj wykonać następujące czynności:

Haml::Template.options[:attr_wrapper] = '"' 
+1

gdzie umieścić że staticmatic? configuration.rb w src/under projekcie statycznym, to nie jest to. Ponieważ nie mam jeszcze pojęcia o rubinach, nie wiem, gdzie umieścić tę konfigurację. – Keyframe

+0

ok, mam małpa załatana render.rb w staticmatic, aby włączyć tę opcję, to wszystko "teraz. Dzięki! – Keyframe

+3

Dla Rails3 umieściłem tę linię w' config/initializers/haml.rb'. –

2

haml robi rzeczywiście kolejność atrybutów alfabetycznie, a to jest rzeczywiście konsekwencją parsera Ruby. W przyszłości atrybuty mogą być uporządkowane w kolejności dokumentów tak często, jak to możliwe, ale to nie stanie się tak, dopóki Haml 2.2 lub późniejszy.

+0

Zastanawiam się, czy to jest w ogóle możliwe?Wiem, że to nie ma znaczenia, uporządkowanie atrybutów, ale po prostu nie ma racji patrząc na kod. Mógłbym przygotować pomocnika i uwzględnić to, ale dlaczego miałbym wtedy używać hamla, prawda? – Keyframe

+3

Problem wynika z tego, w jaki sposób Haml kompiluje szablony. Najpierw konwertuje szablony na kod Ruby, który uruchamia się, tworząc ciąg znaków HTML. Przed kompilacją próbuje sparsować wartość atrybutu atrybutu (ostatnio na tym się poprawiło - powinna być w stanie przeanalizować dowolny skrót wartości atrybutu, który nie zawiera wartości dynamicznych), ale jeśli nie, wstawia on skrót jako literalną wartość Ruby hash w skompilowanym kodzie. Ponieważ skróty Ruby nie zachowują porządku (przynajmniej w Ruby 1.8), oznacza to, że wynikowe atrybuty są w niezdefiniowanej kolejności. Aby uczynić wynik deterministycznym, Haml je alfabetycznie. –

+1

Ponieważ Haml analizuje statyczne atrybuty bez zrzucania ich do Rubiego, możliwe jest wyprowadzanie ich w kolejności szablonów. Problemem staje się wówczas ustalenie, co zrobić z pewnymi statycznymi i dynamicznymi atrybutami. Jest to problem, który można rozwiązać, i prawdopodobnie zostanie rozwiązany w końcu, ale następna wersja Haml (2.2) zbliża się do wydania, więc może zostać odepchnięta do wersji 2.4. –

0

Cytat: http://haml.info/docs/yardoc/file.REFERENCE.html#options

haml rozumie różne opcje konfiguracyjne, które wpływają na jego wydajność i wyjście.

W Rails, opcje można ustawić poprzez ustawienie Haml::Template.options hash do inicjowania:

# config/initializers/haml.rb

Haml::Template.options[:format] = :html5 

Poza Rails, można ustawić je konfigurując je globalnie Haml::Options.defaults:

Haml::Options.defaults[:format] = :html5 

Na koniec można je również ustawić, przekazując skrót mieszania opcji do [Haml :: Engine # initialize] [1]. Dla pełna lista dostępnych opcji znajduje się w [Haml :: Options] [2].

[1]: http://haml.info/docs/yardoc/Haml/Engine.html#initialize-instance_method

[2]: http://haml.info/docs/yardoc/Haml/Options.html

+0

Pytanie ma już prawie sześć lat :) – Keyframe

+0

Jednak jestem nowy w tej dziedzinie, tak dla mnie aktualny. I może być dla innych. –