(function ($, Drupal) {
/*global jQuery:false */
/*global Drupal:false */
"use strict";
/**
* Provide vertical tab summaries for Bootstrap settings.
*/
Drupal.behaviors.bootstrapSettingSummaries = {
attach: function (context) {
var $context = $(context);
// General.
$context.find('#edit-general').drupalSetSummary(function () {
var summary = [];
// Buttons.
var size = $context.find('select[name="bootstrap_button_size"] :selected');
if (size.val()) {
summary.push(Drupal.t('@size Buttons', {
'@size': size.text()
}));
}
// Images.
var shape = $context.find('select[name="bootstrap_image_shape"] :selected');
if (shape.val()) {
summary.push(Drupal.t('@shape Images', {
'@shape': shape.text()
}));
}
if ($context.find(':input[name="bootstrap_image_responsive"]').is(':checked')) {
summary.push(Drupal.t('Responsive Images'));
}
// Tables.
if ($context.find(':input[name="bootstrap_table_responsive"]').is(':checked')) {
summary.push(Drupal.t('Responsive Tables'));
}
return summary.join(', ');
});
// Components.
$context.find('#edit-components').drupalSetSummary(function () {
var summary = [];
// Breadcrumbs.
var breadcrumb = parseInt($context.find('select[name="bootstrap_breadcrumb"]').val(), 10);
if (breadcrumb) {
summary.push(Drupal.t('Breadcrumbs'));
}
// Navbar.
var navbar = 'Navbar: ' + $context.find('select[name="bootstrap_navbar_position"] :selected').text();
if ($context.find('input[name="bootstrap_navbar_inverse"]').is(':checked')) {
navbar += ' (' + Drupal.t('Inverse') + ')';
}
summary.push(navbar);
return summary.join(', ');
});
// Javascript.
$context.find('#edit-javascript').drupalSetSummary(function () {
var summary = [];
if ($context.find('input[name="bootstrap_anchors_fix"]').is(':checked')) {
summary.push(Drupal.t('Anchors'));
}
if ($context.find('input[name="bootstrap_popover_enabled"]').is(':checked')) {
summary.push(Drupal.t('Popovers'));
}
if ($context.find('input[name="bootstrap_tooltip_enabled"]').is(':checked')) {
summary.push(Drupal.t('Tooltips'));
}
return summary.join(', ');
});
// Advanced.
$context.find('#edit-advanced').drupalSetSummary(function () {
var summary = [];
var $cdnProvider = $context.find('select[name="bootstrap_cdn_provider"] :selected');
var cdnProvider = $cdnProvider.val();
if ($cdnProvider.length && cdnProvider.length) {
summary.push(Drupal.t('CDN provider: %provider', { '%provider': $cdnProvider.text() }));
// jsDelivr CDN.
if (cdnProvider === 'jsdelivr') {
var $jsDelivrVersion = $context.find('select[name="bootstrap_cdn_jsdelivr_version"] :selected');
if ($jsDelivrVersion.length && $jsDelivrVersion.val().length) {
summary.push($jsDelivrVersion.text());
}
var $jsDelivrTheme = $context.find('select[name="bootstrap_cdn_jsdelivr_theme"] :selected');
if ($jsDelivrTheme.length && $jsDelivrTheme.val() !== 'bootstrap') {
summary.push($jsDelivrTheme.text());
}
}
}
return summary.join(', ');
});
}
};
/**
* Provide BootstrapCDN (via jsDelivr) theme preview.
*/
Drupal.behaviors.bootstrapThemePreview = {
attach: function (context) {
var $context = $(context);
var $preview = $context.find('#bootstrap-theme-preview');
$preview.once('bootstrap-theme-preview', function () {
// Construct the "Bootstrap Theme" preview here since it's not actually
// a Bootswatch theme, but rather one provided by Bootstrap itself.
// Unfortunately getbootstrap.com does not have HTTPS enabled, so the
// preview image cannot be protocol relative.
// @todo Make protocol relative if/when Bootstrap enables HTTPS.
$preview.append('
');
// Retrieve the Bootswatch theme preview images.
// @todo This should be moved into PHP.
$.ajax({
url: 'https://bootswatch.com/api/3.json',
dataType: 'json',
success: function (json) {
var themes = json.themes;
for (var i = 0, len = themes.length; i < len; i++) {
$preview.append('
');
}
},
complete: function () {
$preview.parent().find('select[name="bootstrap_cdn_jsdelivr_theme"]').bind('change', function () {
$preview.find('.bootswatch-preview').addClass('element-invisible');
if ($(this).val().length) {
$preview.find('#bootstrap-theme-preview-' + $(this).val()).removeClass('element-invisible');
}
}).change();
}
});
});
}
};
/**
* Provide Bootstrap navbar preview.
*/
Drupal.behaviors.bootstrapNavbarPreview = {
attach: function (context) {
var $context = $(context);
var $preview = $context.find('#edit-navbar');
$preview.once('navbar', function () {
var $body = $context.find('body');
var $navbar = $context.find('#navbar.navbar');
$preview.find('select[name="bootstrap_navbar_position"]').bind('change', function () {
var $position = $(this).find(':selected').val();
$navbar.removeClass('navbar-fixed-bottom navbar-fixed-top navbar-static-top container');
if ($position.length) {
$navbar.addClass('navbar-'+ $position);
}
else {
$navbar.addClass('container');
}
// Apply appropriate classes to body.
$body.removeClass('navbar-is-fixed-top navbar-is-fixed-bottom navbar-is-static-top');
switch ($position) {
case 'fixed-top':
$body.addClass('navbar-is-fixed-top');
break;
case 'fixed-bottom':
$body.addClass('navbar-is-fixed-bottom');
break;
case 'static-top':
$body.addClass('navbar-is-static-top');
break;
}
});
$preview.find('input[name="bootstrap_navbar_inverse"]').bind('change', function () {
$navbar.toggleClass('navbar-inverse navbar-default');
});
});
}
};
})(jQuery, Drupal);