This repository has been archived on 2024-12-01. You can view files and clone it, but cannot push or open issues or pull requests.
factuges_web/www/themes/factuges/assets/scripts/app.js
david e93adbdd4e - Importación inicial
- Registro, activación y entrada de usuarios


git-svn-id: https://192.168.0.254/svn/Rodax.factuges_web/trunk@2 e455b18d-f7fe-5245-9c43-e2c35af70a32
2013-06-13 16:04:48 +00:00

654 lines
22 KiB
JavaScript

/**
Core script to handle the entire layout and base functions
**/
var App = function () {
// IE mode
var isRTL = false;
var isIE8 = false;
var isIE9 = false;
var isIE10 = false;
var responsiveHandlers = [];
// theme layout color set
var layoutColorCodes = {'blue':'#4b8df8','red':'#e02222','green':'#35aa47','purple':'#852b99','grey':'#555555', 'yellow' :'#ffb848'};
//* BEGIN:CORE HANDLERS *//
// this function handles responsive layout on screen size resize or mobile device rotate.
var handleResponsive = function () {
if ($('body').css('direction') === 'rtl') {
isRTL = true;
}
if (jQuery.browser.msie && jQuery.browser.version.substr(0, 1) == 8) {
isIE8 = true; // detect IE8 version
}
if (jQuery.browser.msie && jQuery.browser.version.substr(0, 1) == 9) {
isIE9 = true; // detect IE9 version
}
var isIE10 = !! navigator.userAgent.match(/MSIE 10/);
if (isIE10) {
jQuery('html').addClass('ie10'); // detect IE10 version
}
// loops all page elements with "responsive" class and applies classes for tablet mode
// For metornic 1280px or less set as tablet mode to display the content properly
var _handleTabletElements = function () {
if ($(window).width() <= 1280) {
$(".responsive").each(function () {
var forTablet = $(this).attr('data-tablet');
var forDesktop = $(this).attr('data-desktop');
if (forTablet) {
$(this).removeClass(forDesktop);
$(this).addClass(forTablet);
}
});
}
}
// loops all page elements with "responsive" class and applied classes for desktop mode
// For metornic higher 1280px set as desktop mode to display the content properly
var _handleDesktopElements = function () {
if ($(window).width() > 1280) {
$(".responsive").each(function () {
var forTablet = $(this).attr('data-tablet');
var forDesktop = $(this).attr('data-desktop');
if (forTablet) {
$(this).removeClass(forTablet);
$(this).addClass(forDesktop);
}
});
}
}
// remove sidebar toggler if window width smaller than 900(for table and phone mode)
var _handleSidebar = function () {
if ($(window).width() < 900) {
$.cookie('sidebar-closed', null);
$('.page-container').removeClass("sidebar-closed");
}
}
// handle all elements which require to re-initialize on screen width change(on resize or on rotate mobile device)
var handleElements = function () {
// reinitialize core elements
handleTooltip();
_handleSidebar();
_handleTabletElements();
_handleDesktopElements();
handleSidenarAndContentHeight();
// reinitialize other subscribed elements
for (var i in responsiveHandlers) {
var each = responsiveHandlers[i];
each.call();
}
}
// handles responsive breakpoints.
$(window).setBreakpoints({
breakpoints: [320, 480, 768, 900, 1024, 1280]
});
$(window).bind('exitBreakpoint320', function () {
handleElements();
});
$(window).bind('enterBreakpoint320', function () {
handleElements();
});
$(window).bind('exitBreakpoint480', function () {
handleElements();
});
$(window).bind('enterBreakpoint480', function () {
handleElements();
});
$(window).bind('exitBreakpoint768', function () {
handleElements();
});
$(window).bind('enterBreakpoint768', function () {
handleElements();
});
$(window).bind('exitBreakpoint900', function () {
handleElements();
});
$(window).bind('enterBreakpoint900', function () {
handleElements();
});
$(window).bind('exitBreakpoint1024', function () {
handleElements();
});
$(window).bind('enterBreakpoint1024', function () {
handleElements();
});
$(window).bind('exitBreakpoint1280', function () {
handleElements();
});
$(window).bind('enterBreakpoint1280', function () {
handleElements();
});
}
var handleSidenarAndContentHeight = function () {
var content = $('.page-content');
var sidebar = $('.page-sidebar');
if (!content.attr("data-height")) {
content.attr("data-height", content.height());
}
if (sidebar.height() > content.height()) {
content.css("min-height", sidebar.height() + 20);
} else {
content.css("min-height", content.attr("data-height"));
}
}
var handleSidebarMenu = function () {
jQuery('.page-sidebar li > a').live('click', function (e) {
if ($(this).next().hasClass('sub-menu') == false) {
return;
}
var parent = $(this).parent().parent();
parent.children('li.open').children('a').children('.arrow').removeClass('open');
parent.children('li.open').children('.sub-menu').slideUp(200);
parent.children('li.open').removeClass('open');
var sub = jQuery(this).next();
if (sub.is(":visible")) {
jQuery('.arrow', jQuery(this)).removeClass("open");
jQuery(this).parent().removeClass("open");
sub.slideUp(200, function () {
handleSidenarAndContentHeight();
});
} else {
jQuery('.arrow', jQuery(this)).addClass("open");
jQuery(this).parent().addClass("open");
sub.slideDown(200, function () {
handleSidenarAndContentHeight();
});
}
e.preventDefault();
});
// handle ajax links
jQuery('.page-sidebar li > a.ajaxify').live('click', function (e) {
e.preventDefault();
App.scrollTop();
var url = $(this).attr("href");
var menuContainer = jQuery('.page-sidebar ul');
var pageContent = $('.page-content');
var pageContentBody = $('.page-content .page-content-body');
menuContainer.children('li.active').removeClass('active');
menuContainer.children('arrow.open').removeClass('open');
$(this).parents('li').each(function(){
$(this).addClass('active');
$(this).children('a > span.arrow').addClass('open');
});
$(this).parents('li').addClass('active');
App.blockUI(pageContent, false);
$.post(url, {}, function (res) {
App.unblockUI(pageContent);
pageContentBody.html(res);
App.fixContentHeight(); // fix content height
App.initUniform(); // initialize uniform elements
});
});
}
var handleSidebarToggler = function () {
var container = $(".page-container");
// check if sidebar was closed before
if ($.cookie('sidebar-closed') == 1) {
container.addClass("sidebar-closed");
}
// handle sidebar show/hide
$('.page-sidebar .sidebar-toggler').click(function (e) {
$(".sidebar-search").removeClass("open");
var container = $(".page-container");
if (container.hasClass("sidebar-closed") === true) {
container.removeClass("sidebar-closed");
$.cookie('sidebar-closed', null);
} else {
container.addClass("sidebar-closed");
$.cookie('sidebar-closed', 1);
}
e.preventDefault();
});
// handle the search bar close
$('.sidebar-search .remove').click(function (e) {
$('.sidebar-search').removeClass("open");
e.preventDefault();
});
// handle the search query submit on enter press
$('.sidebar-search input').keypress(function (e) {
if (e.which == 13) {
window.location.href = "extra_search.html";
return false; //<---- Add this line
}
});
// handle the search submit
$('.sidebar-search .submit').click(function (e) {
if ($('.page-container').hasClass("sidebar-closed")) {
if ($('.sidebar-search').hasClass('open') == false) {
$('.sidebar-search').addClass("open");
} else {
window.location.href = "extra_search.html";
}
} else {
window.location.href = "extra_search.html";
}
e.preventDefault();
});
}
var handleHorizontalMenu = function () {
//handle hor menu search form toggler click
$('.header .hor-menu .hor-menu-search-form-toggler').live('click', function (e) {
if ($(this).hasClass('hide')) {
$(this).removeClass('hide');
$('.header .hor-menu .search-form').hide();
} else {
$(this).addClass('hide');
$('.header .hor-menu .search-form').show();
}
e.preventDefault();
});
//handle hor menu search button click
$('.header .hor-menu .search-form .btn').live('click', function (e) {
window.location.href = "extra_search.html";
e.preventDefault();
});
//handle hor menu search form on enter press
$('.header .hor-menu .search-form input').live('keypress', function (e) {
if (e.which == 13) {
window.location.href = "extra_search.html";
return false;
}
});
}
var handleGoTop = function () {
/* set variables locally for increased performance */
jQuery('.footer .go-top').click(function (e) {
App.scrollTo();
e.preventDefault();
});
}
var handlePortletTools = function () {
jQuery('.portlet .tools a.remove').live('click', function () {
var removable = jQuery(this).parents(".portlet");
if (removable.next().hasClass('portlet') || removable.prev().hasClass('portlet')) {
jQuery(this).parents(".portlet").remove();
} else {
jQuery(this).parents(".portlet").parent().remove();
}
});
jQuery('.portlet .tools a.reload').live('click', function () {
var el = jQuery(this).parents(".portlet");
App.blockUI(el);
window.setTimeout(function () {
App.unblockUI(el);
}, 1000);
});
jQuery('.portlet .tools .collapse, .portlet .tools .expand').live('click', function () {
var el = jQuery(this).parents(".portlet").children(".portlet-body");
if (jQuery(this).hasClass("collapse")) {
jQuery(this).removeClass("collapse").addClass("expand");
el.slideUp(200);
} else {
jQuery(this).removeClass("expand").addClass("collapse");
el.slideDown(200);
}
});
}
var handleUniform = function () {
if (!jQuery().uniform) {
return;
}
var test = $("input[type=checkbox]:not(.toggle), input[type=radio]:not(.toggle, .star)");
if (test.size() > 0) {
test.each(function(){
if ($(this).parents(".checker").size() == 0) {
$(this).show();
$(this).uniform();
}
});
}
}
var handleAccordions = function () {
$(".accordion").collapse().height('auto');
var lastClicked;
//add scrollable class name if you need scrollable panes
jQuery('.accordion.scrollable .accordion-toggle').click(function () {
lastClicked = jQuery(this);
}); //move to faq section
jQuery('.accordion.scrollable').on('shown', function () {
jQuery('html,body').animate({
scrollTop: lastClicked.offset().top - 150
}, 'slow');
});
}
var handleScrollers = function () {
$('.scroller').each(function () {
$(this).slimScroll({
size: '7px',
color: '#a1b2bd',
position: isRTL ? 'left' : 'right',
height: $(this).attr("data-height"),
alwaysVisible: ($(this).attr("data-always-visible") == "1" ? true : false),
railVisible: ($(this).attr("data-rail-visible") == "1" ? true : false),
disableFadeOut: true
});
});
}
var handleTooltip = function () {
if (App.isTouchDevice()) { // if touch device, some tooltips can be skipped in order to not conflict with click events
jQuery('.tooltips:not(.no-tooltip-on-touch-device)').tooltip();
} else {
jQuery('.tooltips').tooltip();
}
}
var handlePopover = function () {
jQuery('.popovers').popover();
}
var handleChoosenSelect = function () {
if (!jQuery().chosen) {
return;
}
$(".chosen").each(function () {
$(this).chosen({
allow_single_deselect: $(this).attr("data-with-diselect") === "1" ? true : false
});
});
}
var handleFancybox = function () {
if (!jQuery.fancybox) {
return;
}
if (jQuery(".fancybox-button").size() > 0) {
jQuery(".fancybox-button").fancybox({
groupAttr: 'data-rel',
prevEffect: 'none',
nextEffect: 'none',
closeBtn: true,
helpers: {
title: {
type: 'inside'
}
}
});
}
}
var handleStyler = function () {
var panel = $('.color-panel');
$('.icon-color', panel).click(function () {
$('.color-mode').show();
$('.icon-color-close').show();
});
$('.icon-color-close', panel).click(function () {
$('.color-mode').hide();
$('.icon-color-close').hide();
});
$('li', panel).click(function () {
var color = $(this).attr("data-style");
setColor(color);
$('.inline li', panel).removeClass("current");
$(this).addClass("current");
});
$('input', panel).change(function () {
setLayout();
});
var setColor = function (color) {
$('#style_color').attr("href", "assets/css/themes/" + color + ".css");
}
var setLayout = function () {
if ($('input.header', panel).is(":checked")) {
$("body").addClass("fixed-top");
$(".header").addClass("navbar-fixed-top");
} else {
$("body").removeClass("fixed-top");
$(".header").removeClass("navbar-fixed-top");
}
}
}
var handleFixInputPlaceholderForIE = function () {
//fix html5 placeholder attribute for ie7 & ie8
if (jQuery.browser.msie && jQuery.browser.version.substr(0, 1) <= 9) { // ie7&ie8
// this is html5 placeholder fix for inputs, inputs with placeholder-no-fix class will be skipped(e.g: we need this for password fields)
jQuery('input[placeholder]:not(.placeholder-no-fix), textarea[placeholder]:not(.placeholder-no-fix)').each(function () {
var input = jQuery(this);
jQuery(input).addClass("placeholder").val(input.attr('placeholder'));
jQuery(input).focus(function () {
if (input.val() == input.attr('placeholder')) {
input.val('');
}
});
jQuery(input).blur(function () {
if (input.val() == '' || input.val() == input.attr('placeholder')) {
input.val(input.attr('placeholder'));
}
});
});
}
}
//* END:CORE HANDLERS *//
return {
//main function to initiate template pages
init: function () {
//core handlers
handleResponsive(); // set and handle responsive
handleUniform(); // handles uniform elements
handleSidebarMenu(); // handles main menu
handleHorizontalMenu(); // handles horizontal menu
handleSidebarToggler(); // handles sidebar hide/show
handleScrollers(); // handles slim scrolling contents
handlePortletTools(); // handles portlet action bar functionality(refresh, configure, toggle, remove)
handleTooltip(); // handles bootstrap tooltips
handlePopover(); // handles bootstrap popovers
handleAccordions(); //handles accordions
handleChoosenSelect(); // handles bootstrap chosen dropdowns
handleFixInputPlaceholderForIE(); // fixes/enables html5 placeholder attribute for IE9, IE8
handleGoTop(); //handles scroll to top functionality in the footer
handleStyler(); // handles style customer tool
},
fixContentHeight : function() {
handleSidenarAndContentHeight();
},
addResponsiveHandler: function (func) {
responsiveHandlers.push(func);
},
// useful function to make equal height for contacts stand side by side
setEqualHeight: function (els) {
var tallestEl = 0;
els = jQuery(els);
els.each(function () {
var currentHeight = $(this).height();
if (currentHeight > tallestEl) {
tallestColumn = currentHeight;
}
});
els.height(tallestEl);
},
// wrapper function to scroll to an element
scrollTo: function (el, offeset) {
pos = el ? el.offset().top : 0;
jQuery('html,body').animate({
scrollTop: pos + (offeset ? offeset : 0)
}, 'slow');
},
scrollTop : function() {
App.scrollTo();
},
// wrapper function to block element(indicate loading)
blockUI: function (el, centerY) {
jQuery(el).block({
message: '<img src="./assets/img/ajax-loading.gif" align="">',
centerY: centerY != undefined ? centerY : true,
css: {
top: '10%',
border: 'none',
padding: '2px',
backgroundColor: 'none'
},
overlayCSS: {
backgroundColor: '#000',
opacity: 0.05,
cursor: 'wait'
}
});
},
// wrapper function to un-block element(finish loading)
unblockUI: function (el) {
jQuery(el).unblock({
onUnblock: function () {
jQuery(el).removeAttr("style");
}
});
},
// initializes uniform elements
initUniform: function (els) {
if (els) {
jQuery(els).each(function () {
if ($(this).parents(".checker").size() == 0) {
$(this).show();
$(this).uniform();
}
});
} else {
handleUniform();
}
},
// initializes choosen dropdowns
initChosenSelect: function (els) {
$(els).chosen({
allow_single_deselect: true
});
},
initFancybox: function () {
handleFancybox();
},
getActualVal: function (el) {
var el = jQuery(el);
if (el.val() === el.attr("placeholder")) {
return "";
}
return el.val();
},
getURLParameter: function (paramName) {
var searchString = window.location.search.substring(1),
i, val, params = searchString.split("&");
for (i = 0; i < params.length; i++) {
val = params[i].split("=");
if (val[0] == paramName) {
return unescape(val[1]);
}
}
return null;
},
// check for device touch support
isTouchDevice: function () {
try {
document.createEvent("TouchEvent");
return true;
} catch (e) {
return false;
}
},
isIE8: function () {
return isIE8;
},
isRTL: function () {
return isRTL;
},
getLayoutColorCode: function(name) {
if (layoutColorCodes[name]) {
return layoutColorCodes[name];
} else {
return '';
}
}
};
}();