forked from extern/egroupware
11d4aaf7c1
- Fix tabs headers alignment and resize - Implement a loading page to obscure actual DOM rendering from user's view
120 lines
4.0 KiB
JavaScript
120 lines
4.0 KiB
JavaScript
/**
|
|
* EGroupware jDots / Stylite template
|
|
*
|
|
* @package framework
|
|
* @author Hadi Nategh <hn@stylite.de>
|
|
* @author Andreas Stoeckel <as@stylite.de>
|
|
* @copyright Stylite AG 2014
|
|
* @description Create jdots framework
|
|
*/
|
|
|
|
/*egw:uses
|
|
/vendor/bower-asset/jquery/dist/jquery.js;
|
|
framework.fw_desktop;
|
|
/pixelegg/js/slider.js;
|
|
*/
|
|
(function(window){
|
|
"use strict";
|
|
|
|
/**
|
|
* jdots framework object defenition
|
|
* here we can add framework methods and also override fw_desktop methods if it is neccessary
|
|
*/
|
|
var fw_pixelegg = fw_desktop.extend(
|
|
{
|
|
/**
|
|
* Callback to calculate height of browser iframe or div
|
|
*
|
|
* @param {object} _iframe dom node of iframe or null for div
|
|
* @returns number in pixel
|
|
*/
|
|
getIFrameHeight: function(_iframe)
|
|
{
|
|
var height = this._super.apply(this, arguments);
|
|
|
|
return height;
|
|
},
|
|
|
|
/**
|
|
* Check to see if the tab header will overflow and want to wrap.
|
|
* Deal with it by setting some smaller widths on the tabs.
|
|
*/
|
|
checkTabOverflow: function()
|
|
{
|
|
var topmenuWidth = jQuery('#egw_fw_topmenu_info_items').outerWidth();
|
|
var width = 0;
|
|
var counter = 0;
|
|
var marginR = parseInt(jQuery("#egw_fw_main").css('margin-right'));
|
|
jQuery(this.tabsUi.contHeaderDiv).css('padding-right',topmenuWidth - marginR);
|
|
var outer_width = jQuery(this.tabsUi.contHeaderDiv).width();
|
|
var spans = jQuery(this.tabsUi.contHeaderDiv).children('span');
|
|
spans.css('max-width','');
|
|
spans.each(function() {
|
|
// Do not count and add up node if the width is not set (e.g. status app)
|
|
if (this.clientWidth > 0)
|
|
{
|
|
width += jQuery(this).outerWidth(true);
|
|
counter++;
|
|
}
|
|
});
|
|
if(width > outer_width)
|
|
{
|
|
var max_width = Math.floor(outer_width / counter) - (spans.outerWidth(true) - spans.width());
|
|
spans.css('max-width', max_width + 'px');
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Runs after et2 is loaded
|
|
*
|
|
*/
|
|
et2_loadingFinished: function() {
|
|
this._super.apply(this, arguments);
|
|
jQuery('#egw_fw_firstload').remove();
|
|
},
|
|
|
|
});
|
|
|
|
/**
|
|
* Initialise framework
|
|
*/
|
|
egw_LAB.wait(function() {
|
|
function egw_setSideboxSize(_size)
|
|
{
|
|
document.getElementById('egw_fw_main').style.marginLeft = _size + 'px';
|
|
document.getElementById('egw_fw_sidebar').style.width = _size + 'px';
|
|
}
|
|
|
|
jQuery(document).ready(function() {
|
|
window.framework = new fw_pixelegg("egw_fw_sidemenu", "egw_fw_tabs",
|
|
window.egw_webserverUrl, egw_setSideboxSize,"egw_fw_splitter", 255, 245); // should be identical to jdots_framework::(DEFAULT|MIN)_SIDEBAR_WIDTH
|
|
window.callManual = window.framework.callManual;
|
|
jQuery('#topmenu_info_user_avatar').click(function(){window.framework.toggle_avatar_menu();});
|
|
jQuery('#topmenu_info_print_title').click(function(){window.framework.print();});
|
|
jQuery('#topmenu_info_logout').click(function(){ window.framework.redirect(this.getAttribute('data-logout-url')); });
|
|
jQuery('form[name^="tz_selection"]').children().on('change', function(){framework.tzSelection(this.value); return false;});
|
|
window.egw.link_quick_add('topmenu_info_quick_add');
|
|
|
|
// allowing javascript urls in topmenu and sidebox only under CSP by binding click handlers to them
|
|
var href_regexp = /^javascript:([^\(]+)\((.*)?\);?$/;
|
|
jQuery('#egw_fw_topmenu_items,#egw_fw_topmenu_info_items,#egw_fw_sidemenu,#egw_fw_footer').on('click','a[href^="javascript:"]',function(ev){
|
|
ev.stopPropagation(); // do NOT execute regular event, as it will violate CSP, when handler does NOT return false
|
|
var matches = this.href.match(href_regexp);
|
|
var args = [];
|
|
if (matches.length > 1 && matches[2] !== undefined)
|
|
{
|
|
try {
|
|
args = JSON.parse('['+matches[2]+']');
|
|
}
|
|
catch(e) { // deal with '-encloded strings (JSON allows only ")
|
|
args = JSON.parse('['+matches[2].replace(/','/g, '","').replace(/((^|,)'|'(,|$))/g, '$2"$3')+']');
|
|
}
|
|
}
|
|
args.unshift(matches[1]);
|
|
et2_call.apply(this, args);
|
|
return false; // IE11 seems to require this, ev.stopPropagation() does NOT stop link from being executed
|
|
});
|
|
});
|
|
});
|
|
})(window);
|