blob: e8fb0d42afd080dd9f2541d657fc09231de1f024 [file] [log] [blame]
//= require 'jquery'
//= require 'Tabslet'
//= require 'jcarousel'
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
window.onresize = function() {
adjustContentImageWidth();
}
$(document).ready(function() {
adjustContentImageWidth();
// header menu toggler
$('#drawer-toggle').click(function() {
toggleDrawer(
document.getElementById('drawer-toggle'),
document.getElementById('menu-wrapper')
);
})
// mobile nav menu toggler
$(".mobile-left-menu-toggler").click(function() {
var isActive = $('#left-menu-indicator').hasClass('active');
if (isActive) {
$('#left-menu-indicator').attr("src", '/images/icons/down-arrow.png');
} else {
$('#left-menu-indicator').attr("src", '/images/icons/up-arrow.png');
}
$('#left-menu-wrapper').toggleClass('active');
$('#left-menu-indicator').toggleClass('active');
})
// search box toggler
$('.search-box-toggler').click(function() {
$('.search-form').toggleClass('active');
$('.st-search-input').focus();
})
$('.st-search-input').focusout(function() {
$('.search-form').toggleClass('active');
})
var toggleDrawer = function(icon, menu){
if (menu.classList.contains("active")) {
icon.classList.remove("active");
menu.classList.remove("active");
} else {
icon.classList.add("active");
menu.classList.add("active");
}
}
// mobile search box toggler
$('.mobile-search-bar-toggler').click(function() {
$('.swiftype-wrapper').addClass('active');
$('.st-search-input').focus();
});
$('.swiftype-row-hider').click(function() {
$('.swiftype-wrapper').removeClass('active');
})
// add function call to subscription form
$( "form.ajax-form" ).each(function( index ) {
$(this).ajaxForm();
});
function navExpand(link) {
link.removeClass('expandible').addClass('collapsible');
link.children('i').removeClass('fa-caret-right').addClass('fa-caret-down');
link.next('ul').show();
}
function navCollapse(link) {
link.removeClass('collapsible').addClass('expandible');
link.children('i').removeClass('fa-caret-down').addClass('fa-caret-right');
link.next('ul').hide();
}
// Main Navigation
$('#nav-main a').on('click', function(event) {
var $this = $(this);
if ($this.hasClass('expandible')) {
navExpand($this);
event.preventDefault();
} else if ($this.hasClass('collapsible')) {
navCollapse($this);
event.preventDefault();
}
});
$('#nav-main .active').parentsUntil('#nav-main').each(function() {
$(this).children('.expandible').each(function() {
var $this = $(this);
navExpand($this);
});
});
$('#content').on('click', function(event) {
$('body').removeClass('active-navigation')
});
$('#active-navigation').on('click', function(event) {
event.preventDefault();
$('body').toggleClass('active-navigation')
});
if ($('#table-of-contents').is(':empty')) {
$('#table-of-contents').addClass('empty')
}
// Tabslet
$('.tabs').tabslet();
// Tab Syncing
$('.control li').on('mousedown', function(event) {
lang = $(this).data('lang')
$('.control li[data-lang="' + lang + '"]').each(function() {
$(this).children('a:first').trigger('click')
});
});
// External Links
$("a[href^='http']").each(function() {
$(this).click(function(event) {
event.preventDefault();
window.open(this.href);
}).addClass('external');
});
});
//ajax form submit
$.fn.ajaxForm = function() {
var $form, request, $result, emailRegex, $submitInput;
$form = $(this);
$result = $form.find('.result');
$submitInput = $form.find("input[type=submit]");
emailRegex = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
$form.submit(function(event) {
event.preventDefault();
var validationMessage, valid = true;
$.each([ '.required', 'input[type=email]', '[data-match-string]'], function( i, value ) {
$form.find(value).each(function(j){
$(this).removeClass('error');
var result = null;
switch(i) {
case 0:
result = validateRequired($(this));
break;
case 1:
result = validateEmail($(this));
break;
case 2:
result = validateMatch($(this));
break;
default:
break;
}
if (result && result['pass'] === false) {
$(this).addClass('error');
valid = false;
validationMessage = result['errorMessage'];
}
});
return valid;
});
if (!valid) {
$result.addClass('error');
$result.text(validationMessage);
return;
}
$result.removeClass('error');
$result.text('');
if (request) {
request.abort();
}
var $inputs = $form.find("input, select, button, textarea");
var serializedData = $form.serialize();
$submitInput.val($submitInput.data('state-loading'));
disableForm();
request = $.ajax({
url: $form.attr('action'),
type: "POST",
dataType: "jsonp",
crossDomain: true,
data: serializedData+ "&prefix=formCallBack",
jsonpCallback: "formCallBack",
success: function(data) {
if (data && data.result == "success") {
onFormSubmitSuccess();
} else {
onFormSubmitError();
console.error("error: ", data);
}
},
error: function(jqXHR, textStatus, errorThrown) {
onFormSubmitError();
console.error(
"error: "+ textStatus, errorThrown
);
}
});
function enableForm() {
$inputs.prop("disabled", false);
};
function disableForm() {
$inputs.prop("disabled", true);
};
function onFormSubmitSuccess() {
$submitInput.val($submitInput.data('state-sucess'));
};
function onFormSubmitError() {
$submitInput.val($submitInput.data('state-normal'));
enableForm();
$result.addClass('error');
$result.html('Oops! An error has occurred.');
}
});
function validateRequired($input) {
if (!$input.val()) {
return {
'pass': false,
'errorMessage': 'Please fill out all required fields.'
}
} else {
return {
'pass': true
}
}
};
function validateEmail($input) {
if ($input.val() && !emailRegex.test($input.val())) {
return {
'pass': false,
'errorMessage': 'Please input valid email address.'
}
} else {
return {
'pass': true
}
}
};
function validateMatch($input) {
if ($input.val() !== $input.data('match-string')) {
return {
'pass': false,
'errorMessage': "Input doesn't match."
}
} else {
return {
'pass': true
}
}
};
};
function formCallBack(data) {};
var adjustContentImageWidth = function() {
// prevent image in place of table of content getting squeezed to next row
var tableOfContent = document.getElementById('table-of-content-wrapper');
var rect = tableOfContent.getBoundingClientRect();
$('.content img').each(function() {
var withinTableOfContentRow = this.getBoundingClientRect().top > rect.bottom;
if (withinTableOfContentRow) {
$(this).addClass('default-width');
} else {
$(this).removeClass('default-width');
}
})
}