2012-11-29 50 views
2

我有一個頁面,這個文檔類型:修身模板,自定義DOCTYPE

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"> 

,現在將其轉換成苗條模板格式,BU斯利姆在預置沒有這樣的doctype,我猜想應該有辦法來指定自定義一個。現在我用|

|<!DOCTYPE html PUBLIC "...skip...> 
html 
.... 

但它不換行標誌後doctype線呈現:

<!DOCTYPE html PUBLIC "...skip...><html ... 

這是不希望,任何方式把他們在不同的行?

回答

2

插入在模板中的任何點換行,只需添加這行:

= "\n" 

在斯利姆的「=」命令執行給定的Ruby代碼,並將其添加到緩衝區。在這種情況下,Ruby代碼只是一個換行符。

1

您不需要|字符,Slim允許inline HTML直接包含HTML,並且包含文檔類型。這雖然對格式沒有幫助,但它之後仍然沒有換行符。

Slim使用的doctypes are actually managed in Temple。你可以改變它來添加一個自定義的文檔類型來獲得你想要的行爲。這確實涉及到與Temple的內部數據混淆,所以你需要小心一點,特別是在升級時,因爲內部可能已經改變。

有問題的散列是frozen,所以你不能只是添加一個新的條目。但是,您可以在dup之後爲重複散列添加一個條目,並將新散列分配回常量。這將導致Ruby產生一個警告,因爲你通常不應該以這種方式重新分配常量。現在

new_hash = Temple::HTML::Fast::XHTML_DOCTYPES.dup 
new_hash['rdf'] = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">' 
Temple::HTML::Fast::XHTML_DOCTYPES = new_hash 

你可以使用rdf,就好像是在修身預定義的文檔類型。

doctype rdf 
html 

這將產生:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"> 
<html></html> 

如果你想避免看到警告,設置$VERBOSEnil改變常數(請確保您改回之後)之前。

begin 
    old_verbose, $VERBOSE = $VERBOSE, nil 
    Temple::HTML::Fast::XHTML_DOCTYPES = new_hash 
ensure 
    $VERBOSE = old_verbose 
end 

(你可以如果您使用Rails的它已經完成了你silence_warnings把它變成一個接受塊的方法。)

+0

當我刪除'|'然後我得到的運行時錯誤:'''未知行指示符''' – Dfr

+0

感謝您的解決方案,但我更喜歡避免hacky解決方案,因爲它使應用程序很難保持最後 – Dfr

+1

@Drr您正在使用什麼版本的Slim?它看起來像1.3.1中添加了內聯HTML:https://github.com/stonean/slim/blob/v1.3.1/CHANGES#L3 – matt