View source
<?php
define('FONTAWESOME_LIBRARY', 'fontawesome');
define('FONTAWESOME_NAME', 'Font Awesome');
define('FONTAWESOME_URL', 'http://fontawesome.io');
define('FONTAWESOME_CDN_URL', '//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css');
define('FONTAWESOME_DOWNLOAD_URL', 'https://github.com/FortAwesome/Font-Awesome/archive/v4.7.0.zip');
define('FONTAWESOME_PREFIX', 'fa');
function fontawesome_help($path, $arg) {
switch ($path) {
case 'admin/help#fontawesome':
return '<p><i class="icon-flag icon-large"></i>' . t('<a href="!fontawesome_url">@fontawesome</a> is an iconic font designed for use with <a href="!bootstrap_url">Bootstrap</a>.', array(
'@fontawesome' => FONTAWESOME_NAME,
'!fontawesome_url' => FONTAWESOME_URL,
'!bootstrap_url' => 'http://getbootstrap.com',
)) . '</p>';
}
}
function fontawesome_libraries_info() {
$libraries[FONTAWESOME_LIBRARY] = array(
'name' => FONTAWESOME_NAME,
'vendor url' => FONTAWESOME_URL,
'download url' => FONTAWESOME_DOWNLOAD_URL,
'download file url' => FONTAWESOME_DOWNLOAD_URL,
'version arguments' => array(
'file' => 'css/font-awesome.css',
'pattern' => '/((?:\\d+\\.?){2,3})/',
'lines' => 10,
'cols' => 14,
),
'files' => array(
'css' => array(
'css/font-awesome.css',
),
),
);
return $libraries;
}
function fontawesome_preprocess_html() {
if (variable_get('fontawesome_use_cdn', FALSE)) {
drupal_add_css(FONTAWESOME_CDN_URL, array(
'type' => 'external',
));
}
else {
$library = libraries_load(FONTAWESOME_LIBRARY);
if (!$library['loaded']) {
drupal_set_message($library['error message'] . t('Please make sure that ' . 'fontawesome was download & extracted at sites/all/libraries/fontawesome directory.' . 'Please check README.txt for more details.'), 'warning');
}
}
}
function fontawesome_form_system_performance_settings_alter(&$form, &$form_state, $form_id) {
$form['bandwidth_optimization']['fontawesome_use_cdn'] = array(
'#type' => 'checkbox',
'#title' => t('Use CDN version of FontAwesome.'),
'#default_value' => variable_get('fontawesome_use_cdn', FALSE),
);
}
function fontawesome_icon_providers() {
$providers[FONTAWESOME_LIBRARY] = array(
'title' => FONTAWESOME_NAME,
'url' => FONTAWESOME_URL,
);
return $providers;
}
function fontawesome_icon_bundle_configure(&$settings, &$form_state, &$complete_form) {
$bundle = $form_state['bundle'];
if ($bundle['provider'] === FONTAWESOME_LIBRARY) {
$settings['tag'] = array(
'#type' => 'select',
'#title' => t('HTML Markup'),
'#description' => t('Choose the HTML markup tag that @fontawesome icons should be created with. Typically, this is a %tag tag, however it can be changed to suite the theme requirements.', array(
'@fontawesome' => FONTAWESOME_NAME,
'%tag' => '<' . $bundle['settings']['tag'] . '>',
)),
'#options' => drupal_map_assoc(array(
'i',
'span',
'div',
)),
'#default_value' => $bundle['settings']['tag'],
);
}
}
function fontawesome_preprocess_icon_sprite(&$variables) {
$bundle =& $variables['bundle'];
if ($bundle['provider'] === FONTAWESOME_LIBRARY) {
$key = array_search('icon', $variables['attributes']['class']);
if ($key !== FALSE) {
unset($variables['attributes']['class'][$key]);
}
$variables['attributes']['class'][] = FONTAWESOME_PREFIX;
$variables['icon'] = FONTAWESOME_PREFIX . '-' . $variables['icon'];
}
}
function fontawesome_icon_bundles() {
$bundles[FONTAWESOME_LIBRARY] = array(
'title' => FONTAWESOME_NAME,
'provider' => FONTAWESOME_LIBRARY,
'render' => 'sprite',
'settings' => array(
'tag' => 'i',
),
'icons' => fontawesome_extract_icons(),
);
return $bundles;
}
function fontawesome_extract_icons() {
if (variable_get('fontawesome_use_cdn', FALSE)) {
$url = FONTAWESOME_CDN_URL;
if (strpos($url, '//') === 0) {
$url = 'http:' . $url;
}
$request = drupal_http_request($url);
$content = !empty($request->data) ? $request->data : '';
}
else {
$library = libraries_load(FONTAWESOME_LIBRARY);
$filepath = DRUPAL_ROOT . '/' . $library['library path'] . '/css/font-awesome.css';
$content = file_exists($filepath) ? file_get_contents($filepath) : '';
}
if (preg_match_all('@\\.fa-([a-zA-Z0-9-]*?):before@m', $content, $matches)) {
$icons = $matches[1];
asort($icons);
return drupal_map_assoc($icons);
}
return array();
}