/* global require:false, Popover:false, acsLink:false */
define([
'jquery'
], function($) {
'use strict';
var webs = window.webs = window.webs || {};
/**
* Put extra navbar elements in a "More" dropdown, if necessary.
*/
webs.fixNavWrap = function(jQuery) {
if(typeof(jQuery) === 'undefined') {
jQuery = $;
}
$ = jQuery;
if($('body').hasClass('webs-allow-nav-wrap')) {
return false;
}
$('ul.webs-nav').each(function() {
var
nav = $(this),
items = nav.children('li');
if(items.length <= 0 || (items.css('display') === 'block' && items.first().css('float') === 'none')) {
return false;
}
var
top = items.eq(0).position().top + Math.min(items.eq(0).height(), 10),
maxWidth = nav.parent().width(),
more,
checkFunc,
addMore = function() {
var more = nav.children('.webs-nav-more');
if(more.length === 0) {
var translatedMore = $('#translatedMore').html();
more = $('
' +
'' + translatedMore + '');
nav.append(more);
}
return more.find('ul');
},
addToMore = function(item) {
if(!item.hasClass('webs-home')) { // Never put "Home" in the more dropdown
var lvl3item = item.find('ul ul'); // Themes can't support the extra level, so move lvl3 up into lvl2
if(lvl3item.length > 0) {
lvl3item.children('li').prependTo(lvl3item.parents('ul')[0]);
}
item.prependTo(more);
lvl3item.remove();
return true;
}
return false;
};
if(nav.width() > maxWidth) {
// Nav overflows
more = addMore();
checkFunc = function() {
return nav.width() > maxWidth;
};
} else if(items.eq(items.length - 1).position().top > top) {
// Nav wraps
more = addMore();
var
moreLi = more.parent(),
// If the more is display: none, use it's sibling's position
// It's very important that is(':visible') here returns false for visibility:hidden
reference = moreLi.is(':visible') ? moreLi : moreLi.prev();
checkFunc = function() {
if(reference.length > 0) {
return reference.position().top > top;
} else {
return false;
}
};
}
if(more && typeof(checkFunc) === 'function') {
for(var i = items.length - 1; i > 0 && checkFunc(); i--) {
addToMore(items.eq(i));
}
}
});
// May not 100% belong here, but...
// Ancestor pages need child-active class
$('ul.webs-nav .has-children .active').parents('.has-children').addClass('child-active');
};
/**
* webs.siteLoginPopover from webs_common.js
* Modified to require websover
*/
webs.siteLoginPopover = function(server, email, siteID) {
return new Popover(server + '/s/login/siteLoginPopover?id=' + email + '&site=' + siteID, {
width: 430,
height: (typeof acsLink !== 'undefined' ? 300 : 175),
heading: 'Manage Website'
}).show();
};
$(function($) {
// Open links in new window
// in edit mode or where we want this function disabled, simply set the disableLink data key on the anchor
$('body').delegate('.w-link-new-window, .fw_link_newWindow', 'click', function() {
var $node = $(this);
if(!$node.data('disableLink')) {
var href = $(this).attr('href');
window.open(href, '_blank');
return false;
}
});
// toggle state of 'expired premium' header:
toggleExpiredPremiumHeader();
// Sign-out tab for social sites
createSignoutTab();
});
function toggleExpiredPremiumHeader() {
var opened = $('.webs-expired-premium.header').hasClass('open');
$('body').on('click', '.webs-expired-premium.header .toggle', function(event) {
event.preventDefault();
if(opened) {
$(event.currentTarget).closest('.webs-expired-premium.header').addClass('closed').removeClass('open');
opened = false;
return;
}
$(event.currentTarget).closest('.webs-expired-premium.header').addClass('open').removeClass('closed');
opened = true;
});
}
function createSignoutTab() {
if(!webs.visitor) {
return false;
}
$('').attr('id', 'fw-member-presence')
.append($('').addClass('fw-display-name').attr('href', webs.site.url + 'apps/profile')
.html(webs.visitor.displayName))
.append($('').addClass('fw-signout').attr('href', webs.site.url + 'apps/auth/logout').html('Sign Out'))
.appendTo('body');
}
});