2009-06-08 4 views
18

Uso staticmatic per i template che uso successivamente con PHP. Esiste una strana situazione in cui alcuni attributi di tag hanno virgolette singole, mentre alcuni hanno virgolette doppie. Vorrei tutti loro di avere doppi apici esclusivamente (! Non che sia importante credo, ma li voglio così)Haml - come faccio a forzare gli attributi del tag a usare solo le virgolette doppie E come posso ordinare gli attributi del tag nel modo in cui non lo sono?

Ad esempio, il codice 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 

produce seguente:

<?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> 

nota che non importa se uso virgolette singole o virgolette in codice haml, ottengo sempre lo stesso risultato!

Inoltre, sembra che haml-> html output ordina gli attributi dei tag in ordine alfabetico, non nel modo in cui li ho ordinati in haml. Sospetto che questo abbia qualcosa a che fare con gli array di ruby, ma non sono sicuro dal momento che non posso/non posso usare Ruby separatamente da ham in staticmatic. Come potrei averli ordinati allo stesso modo in cui li ho ordinati in ruby ​​array in codice haml?

risposta

28

provare quanto segue:

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

dove dovrei metterlo in staticmatic? configuration.rb in src/under progetto fatto da staticmatic non lo è. Dal momento che ho ancora una minima idea del rubino, non so dove mettere questa configurazione. – Keyframe

+0

ok, ho scimmia con patch render.rb in staticmatic per includere quell'opzione, è tutto "ora. Grazie! – Keyframe

+3

Per Rails3 ho messo questa riga in' config/initializers/haml.rb'. –

2

Haml effettivamente ordine attributi in ordine alfabetico, e questo è davvero una conseguenza del parser di Ruby. In futuro, gli attributi possono essere ordinati nell'ordine del documento il più possibile, ma è improbabile che ciò avvenga prima di Haml 2.2 o versioni successive.

+0

Mi chiedo se è possibile a tutti?So che non importa, l'ordine degli attributi, ma non sembra giusto quando si guarda il codice. Potrei preparare un aiutante e includerlo, ma perché dovrei usare l'haml a tutti allora, giusto? – Keyframe

+3

Il problema deriva dal modo in cui Haml compila i modelli. Converte i modelli prima in codice Ruby che viene eseguito per produrre una stringa di HTML. Prova ad analizzare l'hash dell'attributo prima della compilazione (recentemente è migliorato in questo modo - dovrebbe essere in grado di analizzare qualsiasi hash degli attributi che non include valori dinamici), ma se non può, inserisce l'hash come un Ruby letterale hash nel codice compilato. Poiché gli hash di Ruby non mantengono l'ordine (almeno in Ruby 1.8), ciò significa che gli attributi risultanti sono in un ordine non definito. Quindi, per rendere deterministico l'output, Haml li alfabetizza. –

+1

Poiché Haml analizza gli attributi statici senza scaricarli su Ruby, potrebbe essere possibile eseguire l'output in ordine di modello. Il problema diventa quindi capire cosa fare con alcuni attributi statici e alcuni dinamici. Questo è un problema risolvibile, e probabilmente sarà affrontato alla fine, ma la prossima versione di Haml (2.2) si avvicina al rilascio in modo che possa essere spinto fino alla versione 2.4. –

0

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

Haml capisce varie opzioni di configurazione che influiscono sulla sua prestazioni e di uscita.

In Rails, le opzioni possono essere impostate impostando la Haml::Template.options hash in un inizializzatore:

# config/initializers/haml.rb

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

Rails esterno, è possibile impostare configurando loro a livello globale in Haml::Options.defaults:

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

Infine, è possibile anche impostarli passando un hash di opzioni a [Haml :: Engine # initialize] [1]. Per l'elenco completo delle opzioni disponibili, vedere [Haml :: Opzioni] [2].

[1]

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

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

+0

La domanda ha quasi sei anni :) – Keyframe

+0

Eppure sono nuovo di questa roba, così attuale per me. E può essere per gli altri –