2014-07-03 22 views
0

因此,https://github.com/github/gemoji將諸如:cats::dogs:之類的內容映射爲表情符號。從Forem``)````````等等的Rails Gemoji helper?

例子:

def forem_emojify(content) 
    h(content).to_str.gsub(/:([a-z0-9\+\-_]+):/) do |match| 
    if Emoji.names.include?($1) 
     '<img alt="' + $1 + '" height="20" src="' + asset_path("emoji/#{$1}.png") + '" style="vertical-align:middle" width="20" />' 
    else 
     match 
    end 
    end.html_safe if content.present? 
end 

一個人如何延長這也映射這樣的東西:);)等?

回答

1

這個怎麼樣?

def forem_emojify(content) 
    h(content).to_str.gsub(':)', ':smile:').gsub(';)', ':wink:').gsub(/:([a-z0-9\+\-_]+):/) do |match| 
    if Emoji.names.include?($1) 
     '<img alt="' + $1 + '" height="20" src="' + asset_path("emoji/#{$1}.png") + '" style="vertical-align:middle" width="20" />' 
    else 
     match 
    end 
    end.html_safe if content.present? 
end 

編輯更多的信息:

爲什麼我們不能只使用edit_emojiadd_alias方法呢?

好了,就可以了,就像這樣:

Emoji.edit_emoji(Emoji.find_by_alias('smile')) do |emoji| 
    emoji.add_alias(":)") 
end 

是完全的作品!現在,你可以這樣做:

emoji = Emoji.find_by_alias(":)") #=> #<Emoji::Character:smile(1f604)> 
emoji.name #=> "smile" 
emoji.aliases #=> ["smile", ":)"] 
emoji.raw #=> 

但這裏的問題:當你有像註釋未知的輸入,你必須要找到註釋中的別名。

content = "I'm so happy :grinning: lol I just wanna :) but I'm :grimacing:" 
emoji_pattern = /:([a-z0-9\+\-_]+):/ 
content.scan(emoji_pattern) #=> [["grinning"], ["grimacing"]] 

你可以看到,當你有一個字符串,並使用代碼示例中的正則表達式。它只能找到以冒號開頭和結尾的子字符串。您還可以看到它從冒號中提取別名,然後使用name-without-colons來查找別名的表情符號。我們的自定義別名:)不適合該模式 - 它以冒號開頭,但不以一個結尾...

那麼你能做什麼?對不起,但我不知道! GitHub建議使用一個字符來定義別名 - 這很有道理 - 很難在大塊文本中找到重要的子字符串。你可以嘗試改進正則表達式來查找你的別名嗎?

+0

很酷!但是我注意到一些關於Gemoji自述中的別名的新東西。你認爲像這樣的工作? https://gist.github.com/frankie-loves-jesus/2a0ab7920b1e232a557d –

+1

@MarkBoulder增加了一些後續行動。對不起,如果它不是太令人滿意:wink: –

+0

非常感謝你最大 - 真正體面的答案!我欠你一個人情! –

1

我面臨同樣的限制。最終爲支持表情符號的gemoji寫了一個解析器擴展。見gemoji-parser