2016-06-15 1 views
0

私は様々なプログラミング言語のためにこれらのDevicon font iconsを使用しています。リモートのフォントアイコンが存在するかどうかを動的にチェックするにはどうすればよいですか?

すべてのアイコンはありませんが、ほとんどのアイコンがあります。

私がしたいことは、このフォントライブラリがサポートしていない言語に使用するデフォルトアイコンを使用することです。

これらは彼らの命令です:question.languageは自分の質問にユーザーが送信した言語である

 <div class="vote-icon"> 
      <i class="devicon-<%= question.language %>-plain"></i> 
     </div> 

<!-- in your header --> 
<link rel="stylesheet" href="https://cdn.rawgit.com/konpa/devicon/master/devicon.min.css"> 

<!-- in your body --> 
<i class="devicon-ruby-plain"></i> 

だから私の見解で、私はこれを持っています。

存在しないアイコンが生成されると、そこに空白が残ります。

しかし、私はアイコンが存在するかどうかを確認する方法を、デフォルトに置き換える前に確認することはできません。

思考?

+0

ここから 'question.language'はどこから来たのですか? – uzaif

+0

私のローカルデータベース。私は構文ハイライター(ルージュ)を使用しており、それがサポートする言語のライブラリをレクサーに提供しています。ユーザーが質問を作成するたびに、かなり広いリストから言語を選択することになります。 – marcamillion

+0

アセットにフォントを追加しましたか? – uzaif

答えて

1

存在を意味しない作るこの

require 'open-uri' 
=> true 
f = open("https://cdn.rawgit.com/konpa/devicon/master/devicon.min.css").read 
...load entire css file ... 

を試してみてください

だから、私が実際にこれを行うには、Deviconsから利用可能なアイコンのリストを解析することです。

私は手作業でヘルパーメソッドで配列を作成し、そこにnilチェックを行いました。

だから、それは次のようになります。魔法のように動作

def language_icon(language) 
    devicons = ["amazonwebservices", "android", "angularjs", "apache", "appcelerator", "apple", "atom", "backbonejs", 
     "bitbucket", "bootstrap", "bower", "c", "chrome", "codeigniter", "coffeescript", "confluence", "cplusplus", "csharp", 
     "css3", "d3js", "debian", "django", "docker", "doctrine", "dot-net", "drupal", "erlang", "firefox", "foundation", "gimp", 
     "git", "github", "gitlab", "go", "grunt", "gulp", "heroku", "html5", "ie10", "illustrator", "inkscape", "java", "javascript", 
     "jeet", "jetbrains", "jquery", "krakenjs", "laravel", "less", "linux", "meteor", "mongodb", "moodle", "mysql", "nginx", 
     "nodejs", "nodewebkit", "orale", "photoshop", "php", "phpstorm", "postgresql", "python", "rails", "react", "redhat", "redis", 
     "ruby", "safari", "sass", "sourcetree", "ssh", "symfony", "travis", "trello", "ubuntu", "vim", "windows8", "wordpress", "yii", "zend"] 

    if devicons.include?(language) 
     content_tag(:i, "", class: "devicon-#{language}-plain") 
    else 
     content_tag(:i, "", class: "fa fa-diamond") 
    end 
    end 

私はこれが他の人に役立つことを願っています!

0

その後、あなたは@iconがnilであると、検索

@icon = f["devicon-css3-plain"] 

は、そのアイコンは、もはやあなたの場合

@icon = f[question.language] 
+0

それはここに適用される方法を完全に混乱。 ''が 'nil'であることをどのように検出するのですか? – marcamillion

+0

あなたのコントローラとビューの '@icon || = question.language'のようなもの'

+0

Ok ...あなたは何を意味しているのか分かります。いいえ、あなたはその質問を誤解しています。 'question.language'には' nil'という値はありません。しかし、 'question 'に由来する値(' make')があるかもしれません。様々なプログラミング言語のためのアイコンのリストには存在しない「言語」を含む。今は、何もレンダリングしません。しかし、私はそれがアイコンを見つけられず、何かをレンダリングしなかったことを検出したいと思います。クエリには 'nil'値やオブジェクトが組み込まれていないので、実際に' nil'値であるかどうかを判断する別の方法を見つけることを試みています。 – marcamillion