2016-06-15 2 views
0

Я использую эти Devicon font icons для различных языков программирования.Как я могу динамически проверить, существует ли удаленный значок шрифта?

У них нет каждой иконы, но у них больше всего.

Что я хочу сделать, так это иметь значок по умолчанию, который я использую для языков, которые эта библиотека шрифтов не поддерживает.

Это их инструкции:

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

Итак, на мой взгляд, у меня есть это:

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

Где question.language является посланная пользователем языка на свой вопрос.

Прямо сейчас, когда это генерирует несуществующий значок, он просто оставляет пустое место.

Но я не совсем уверен, как проверить, существует ли значок, прежде чем заменять его по умолчанию.

Мысли?

+0

откуда «вопрос.language» исходит? – uzaif

+0

Мой местный дБ. Я использую синтаксический ярлык (Rouge), и он предоставляет Lexer библиотеку поддерживаемых им языков. Всякий раз, когда пользователь создает вопрос, он может выбрать язык из этого довольно обширного списка. – marcamillion

+0

Вы добавили шрифты в свои активы? – uzaif

ответ

1

Так что только ва y для меня на самом деле сделать это, чтобы проанализировать список значков, доступных от Devicons.

Поэтому я вручную создал список в массиве в вспомогательном методе, а затем выполнил нулевые проверки.

Так это выглядит следующим образом:

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

попробовать этот

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

то сделайте поиск

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

если @icon равна нулю, что означает, что иконка больше не существует

в вас дело

@icon = f[question.language] 
+0

полностью смущен, как это применимо здесь. Как определить, что '' '' nil'? – marcamillion

+0

что-то вроде '@icon || = question.language' в вашем контроллере и в представлении' ' –

+0

Ок ... Я понимаю, что вы имеете в виду. Нет, вы неправильно истолковали вопрос. В 'question.language' никогда не будет значения' nil'. Однако может быть значение (например, 'make'), которое исходит из вопроса.язык ", который не существует в списке значков для различных языков программирования. Сейчас это просто ничего не делает. Но я хотел бы обнаружить, что он не нашел иконку и не сделал что-то еще. Нет встроенного значения 'nil' или объекта для запроса, поэтому я пытаюсь найти альтернативный способ определить, действительно ли это значение« nil ». – marcamillion

Смежные вопросы