egroupware_official/phpgwapi/templates/idots/js/idots.js
2014-02-19 15:11:57 +00:00

89 lines
3.0 KiB
JavaScript

/**
* EGroupware idots template javascript
*
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package phpgwapi
* @subpackage idots
* @link http://www.egroupware.org
* @author Ralf Becker <RalfBecker@outdoor-training.de>
* @version $Id$
*/
/**
* idots javascript
*/
egw_LAB.wait(function() {
// add quick-add select box, but only if parent is present (not for login page!)
var quick_add = document.getElementById('quick_add');
if (quick_add) egw.link_quick_add(quick_add);
// instanciate slideout menus via "data-slide-out" of egw.js script tag
var egw_script = document.getElementById('egw_script_id');
if (egw_script)
{
var data_slide_out = egw_script.getAttribute('data-slide-out');
if (data_slide_out)
{
data_slide_out = JSON.parse(data_slide_out);
for(var i=0; i < data_slide_out.length; ++i)
{
var args=data_slide_out[i];
new ypSlideOutMenu(args.id, args.dir, args.left, args.top, args.width, args.height, args.pos);
for(var selector in args.bind)
{
var data = args.bind[selector];
jQuery(selector).on(data.event, {menu: args.id, method: data.method}, function(event){
window.ypSlideOutMenu[event.data.method].call(window, event.data.menu);
event.preventDefault();
});
}
}
}
}
/**
* Initialisation, when DOM is ready
*/
$j(function()
{
// Installing resize handler for divAppbox and et2_container, as et2 otherwise can not correctly size nextmatch
$j(window).resize(function(){
var appbox_height = $j(window).height()-$j('#topmenu').height()-$j('#divAppIconBar').height()-
$j('#divStatusBar').height()-$j('#divAppboxHeader').height()-$j('#divPoweredBy').height()-20;
//console.log('setting height of '+appbox_height);
$j('#divAppbox').css('min-height', appbox_height+'px');
$j('.et2_container').height(appbox_height-7);
});
$j(window).resize();
$j(window).load(function(){ // fixes sometimes not called resize, probably due to timing issues
$j(window).resize();
});
// allowing javascript urls in topmenu and sidebox only under CSP by binding click handlers to them
var href_regexp = /^javascript:([^\(]+)\((.*)?\);?$/;
jQuery('#topmenu_items,#thesideboxcolumn').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]);
return et2_call.apply(this, args);
});
// make sidebox resizable with jQueryUI resizable
jQuery('#thesideboxcolumn').resizable({handles: 'e', minWidth: 200, stop: function(event, ui){
egw.set_preference(egw_appName, 'idotssideboxwidth', ui.size.width);
}});
});
});