jquery_scrollup-8.x-1.0/jquery_scrollup.module
jquery_scrollup.module
<?php
/**
* Implements hook_page_attachments().
*/
function jquery_scrollup_page_attachments(array &$attachments) {
$settings = \Drupal::config('jquery_scrollup.settings')->get();
// Alter configuration settings.
\Drupal::moduleHandler()->alter('jquery_scrollup_js_settings', $settings);
if ($settings['preventOnMobile'] && (is_mobile())) {
return FALSE;
}
if ($settings['preventOnAdminPages'] && (is_adminpage())) {
return FALSE;
}
if ($settings['preventOnFrontPage'] && (\Drupal::service('path.matcher')
->isFrontPage())
) {
return FALSE;
}
// If here: we know we have to include the jquery_scrollup.
$attachments['#attached']['library'][] = 'jquery_scrollup/jquery_scrollup';
$attachments['#attached']['drupalSettings']['jquery_scrollup'] = $settings;
$attachments['#cache']['tags'] = ['jquery_scrollup'];
$style = $style_icon = $style_hover = $style_icon_hover = '';
switch ($settings['buttonType']) {
case 'icon':
$style_icon .= !empty($settings['buttonColor']) ? "background-color: ${settings['buttonColor']}; " : '';
$style_icon_hover .= !empty($settings['buttonColorHover']) ? "background-color: ${settings['buttonColorHover']}; " : '';
$style .= !empty($settings['buttonBgColor']) ? "background-color: ${settings['buttonBgColor']}; " : '';
$style_hover .= !empty($settings['buttonBgColorHover']) ? "background-color: ${settings['buttonBgColorHover']}; " : '';
break;
case 'pill':
$style .= !empty($settings['buttonColor']) ? "color: ${settings['buttonColor']}; " : '';
$style .= !empty($settings['buttonBgColor']) ? "background-color: ${settings['buttonBgColor']}; " : '';
$style_hover .= !empty($settings['buttonColorHover']) ? "color: ${settings['buttonColorHover']}; " : '';
$style_hover .= !empty($settings['buttonBgColorHover']) ? "background-color: ${settings['buttonBgColorHover']}; " : '';
break;
case 'tab':
$style .= !empty($settings['buttonColor']) ? "color: ${settings['buttonColor']}; " : '';
$style .= !empty($settings['buttonBgColor']) ? "background: ${settings['buttonBgColor']}; " : '';
$style_hover .= !empty($settings['buttonColorHover']) ? "color: ${settings['buttonColorHover']}; " : '';
$style_hover .= !empty($settings['buttonBgColorHover']) ? "background: ${settings['buttonBgColorHover']}; " : '';
break;
default:
break;
}
// Add some custom CSS depending on configurations.
if (!empty($style)) {
$attachments['#attached']['html_head'][] = [
[
'#tag' => 'style',
'#value' => "#scrollUp { $style }",
],
'style',
];
}
if (!empty($style_hover)) {
$attachments['#attached']['html_head'][] = [
[
'#tag' => 'style',
'#value' => '#scrollUp:hover {' . $style_hover . '}',
],
'style_hover',
];
}
if (!empty($style_icon)) {
$attachments['#attached']['html_head'][] = [
[
'#tag' => 'style',
'#value' => "#scrollUp:after { $style_icon }",
],
'style_icon',
];
}
if (!empty($style_icon_hover)) {
$attachments['#attached']['html_head'][] = [
[
'#tag' => 'style',
'#value' => "#scrollUp:hover:after { $style_icon_hover }",
],
'style_icon_hover',
];
}
return TRUE;
}
/**
* Check if mobile or touch device with PHP so javascript and css isn't
* included in that case.
*/
function is_mobile() {
// Check for mobile device using Browscap module if it is available.
if (\Drupal::moduleHandler()->moduleExists('browscap')) {
$browser = \Drupal::service('browscap')->getBrowser();
if (isset($browser['ismobiledevice']) && $browser['ismobiledevice'] == 1) {
return TRUE;
}
}
if (isset($_SERVER["HTTP_X_WAP_PROFILE"])) {
return TRUE;
}
if (isset($_SERVER["HTTP_ACCEPT"]) && preg_match("/wap\.|\.wap/i", $_SERVER["HTTP_ACCEPT"])) {
return TRUE;
}
if (isset($_SERVER["HTTP_USER_AGENT"])) {
$user_agents = [
"midp",
"j2me",
"iphone",
"avantg",
"docomo",
"novarra",
"palmos",
"palmsource",
"240x320",
"opwv",
"chtml",
"pda",
"windows\ ce",
"mmp\/",
"blackberry",
"mib\/",
"symbian",
"wireless",
"nokia",
"hand",
"mobi",
"phone",
"cdm",
"up\.b",
"audio",
"sie\-",
"sec\-",
"samsung",
"htc",
"mot\-",
"mitsu",
"sagem",
"sony",
"alcatel",
"lg",
"erics",
"vx",
"^nec",
"philips",
"mmm",
"xx",
"panasonic",
"sharp",
"wap",
"sch",
"rover",
"pocket",
"benq",
"java",
"pt",
"pg",
"vox",
"amoi",
"bird",
"compal",
"kg",
"voda",
"sany",
"kdd",
"dbt",
"sendo",
"sgh",
"gradi",
"jb",
"\d\d\di",
"moto",
"ipad",
"android",
"ipod",
"webos",
];
foreach ($user_agents as $user_string) {
if (preg_match("/" . $user_string . "/i", strtolower($_SERVER["HTTP_USER_AGENT"]))) {
return TRUE;
}
}
}
return FALSE;
}
/**
* Check if page viewed is in admin section or a node/edit for possible option
* to not include javascript and css in that case.
*/
function is_adminpage() {
$route = \Drupal::routeMatch()->getRouteObject();
$is_admin = \Drupal::service('router.admin_context')->isAdminRoute($route);
// Alter for admin prevent check.
\Drupal::moduleHandler()->alter('jquery_scrollup_admin_prevent', $is_admin);
return $is_admin;
}
