/** * 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 * @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]); et2_call.apply(this, args); return false; // IE11 seems to require this, ev.stopPropagation() does NOT stop link from being executed }); // 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); }}); }); });