diff --git a/htdocs/core/js/lib_foot.js.php b/htdocs/core/js/lib_foot.js.php new file mode 100644 index 00000000000..ff45a5d1017 --- /dev/null +++ b/htdocs/core/js/lib_foot.js.php @@ -0,0 +1,142 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * or see http://www.gnu.org/ + */ + +/** + * \file htdocs/core/js/lib_foot.js.php + * \brief File that include javascript functions (included if option use_javascript activated) + */ + +//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1'); // Not disabled cause need to load personalized language +//if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1'); +if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC','1'); +//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); // Not disabled cause need to do translations +if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK',1); +if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL',1); +if (! defined('NOLOGIN')) define('NOLOGIN',1); +if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU',1); +if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML',1); +if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1'); + +session_cache_limiter(FALSE); + +require_once '../../main.inc.php'; + +// Define javascript type +top_httphead('text/javascript; charset=UTF-8'); +// Important: Following code is to avoid page request by browser and PHP CPU at each Dolibarr page access. +if (empty($dolibarr_nocache)) header('Cache-Control: max-age=3600, public, must-revalidate'); +else header('Cache-Control: no-cache'); + +//var_dump($conf); + +print '/* Reposition management (does not work if a redirect is done after action of submission) */'."\n"; +print 'jQuery(document).ready(function() {'."\n"; +print '/* If page_y set, we set scollbar with it */'."\n"; +print "page_y=getParameterByName('page_y', 0); if (page_y > 0) $('html, body').scrollTop(page_y);\n"; +print '/* Set handler to add page_y param on some a href links */'."\n"; +print 'jQuery(".reposition").click(function() { + var page_y = $(document).scrollTop(); + this.href=this.href+\'&page_y=\'+page_y; + console.log("this.ref is now "+this.href) + });'."\n"; +print '});'."\n"; + + +// Wrapper to show tooltips (html or onclick popup) +if (empty($conf->dol_no_mouse_hover)) +{ + print "\n/* JS CODE TO ENABLE Tooltips on all object with class classfortooltip */\n"; + print ' + jQuery(document).ready(function () { + jQuery(".classfortooltip").tooltip({ + show: { collision: "flipfit", effect:\'toggle\', delay:50 }, + hide: { effect:\'toggle\', delay: 50 }, + tooltipClass: "mytooltip", + content: function () { + return $(this).prop(\'title\'); /* To force to get title as is */ + } + }); + jQuery(".classfortooltiponclicktext").dialog({ closeOnEscape: true, classes: { "ui-dialog": "highlight" }, maxHeight: window.innerHeight-60, width: '.($conf->browser->layout == 'phone' ? 400 : 700).', autoOpen: false }).css("z-index: 5000"); + jQuery(".classfortooltiponclick").click(function () { + console.log("We click on tooltip for element with dolid="+$(this).attr(\'dolid\')); + if ($(this).attr(\'dolid\')) + { + obj=$("#idfortooltiponclick_"+$(this).attr(\'dolid\')); /* obj is a div component */ + obj.dialog("open"); + + } + }); + }); + ' . "\n"; +} + +// Wrapper to manage dropdown +if (! defined('JS_JQUERY_DISABLE_DROPDOWN')) +{ + print "\n/* JS CODE TO ENABLE dropdown */\n"; + print ' + jQuery(document).ready(function () { + $(".dropdown dt a").on(\'click\', function () { + //console.log($(this).parent().parent().find(\'dd ul\')); + $(this).parent().parent().find(\'dd ul\').slideToggle(\'fast\'); + // Note: Did not find a way to get exact height (value is update at exit) so i calculate a generic from nb of lines + heigthofcontent = 21 * $(this).parent().parent().find(\'dd div ul li\').length; + if (heigthofcontent > 300) heigthofcontent = 300; // limited by max-height on css .dropdown dd ul + posbottom = $(this).parent().parent().find(\'dd\').offset().top + heigthofcontent + 8; + //console.log(posbottom); + var scrollBottom = $(window).scrollTop() + $(window).height(); + //console.log(scrollBottom); + diffoutsidebottom = (posbottom - scrollBottom); + console.log("heigthofcontent="+heigthofcontent+", diffoutsidebottom (posbottom="+posbottom+" - scrollBottom="+scrollBottom+") = "+diffoutsidebottom); + if (diffoutsidebottom > 0) + { + pix = "-"+(diffoutsidebottom+8)+"px"; + console.log("We reposition top by "+pix); + $(this).parent().parent().find(\'dd\').css("top", pix); + } + // $(".dropdown dd ul").slideToggle(\'fast\'); + }); + $(".dropdowncloseonclick").on(\'click\', function () { + console.log("Link has class dropdowncloseonclick, so we close/hide the popup ul"); + $(this).parent().parent().hide(); + }); + + $(document).bind(\'click\', function (e) { + var $clicked = $(e.target); + if (!$clicked.parents().hasClass("dropdown")) $(".dropdown dd ul").hide(); + }); + }); + '; +} + +// Wrapper to manage document_preview +if ($conf->browser->layout != 'phone') +{ + print "\n/* JS CODE TO ENABLE document_preview */\n"; + print ' + jQuery(document).ready(function () { + jQuery(".documentpreview").click(function () { + console.log("We click on preview for element with href="+$(this).attr(\'href\')+" mime="+$(this).attr(\'mime\')); + document_preview($(this).attr(\'href\'), $(this).attr(\'mime\'), \''.dol_escape_js($langs->transnoentities("Preview")).'\'); + return false; + }); + }); + console.log("end of js code to manage preview"); + ' . "\n"; +} + diff --git a/htdocs/core/js/lib_head.js.php b/htdocs/core/js/lib_head.js.php index ddfe5d257e1..76817294e4d 100644 --- a/htdocs/core/js/lib_head.js.php +++ b/htdocs/core/js/lib_head.js.php @@ -853,7 +853,7 @@ function document_preview(file, type, title) if ($.inArray(type, ValidImageTypes) < 0) { var width='85%'; var object_width='100%'; - var height = $( window ).height()*0.90; + var height = ($( window ).height() - 60) * 0.90; var object_height='98%'; show_preview('notimage'); diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index bb468fa6cc7..e13d8a2febf 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -6304,112 +6304,101 @@ function printCommonFooter($zone='private') if ($zone == 'private') print "\n".''."\n"; else print "\n".''."\n"; - if (! empty($conf->global->MAIN_HTML_FOOTER)) print $conf->global->MAIN_HTML_FOOTER."\n"; - - print "\n"; - if (! empty($conf->use_javascript_ajax)) + $parameters=array(); + $reshook=$hookmanager->executeHooks('printCommonFooter',$parameters); // Note that $action and $object may have been modified by some hooks + if (empty($reshook)) { - print ''."\n"; - print ''."\n"; - } - - // Google Analytics (need Google module) - if (! empty($conf->google->enabled) && ! empty($conf->global->MAIN_GOOGLE_AN_ID)) - { - if (($conf->dol_use_jmobile != 4)) - { - print "\n"; - print ''."\n"; + if (empty($conf->dol_use_jmobile)) + { + print "\n"; + print '/* Set handler to switch left menu page (menuhider) */'."\n"; + print 'jQuery(".menuhider").click(function() {'; + print ' console.log("We click on .menuhider");'."\n"; + //print " $('.side-nav').animate({width:'toggle'},200);\n"; // OK with eldy theme but not with md + print " $('.side-nav').toggle()\n"; + print " $('.login_block').toggle()\n"; + print '});'."\n"; + } + + // Google Analytics (need Google module) + if (! empty($conf->google->enabled) && ! empty($conf->global->MAIN_GOOGLE_AN_ID)) + { + if (($conf->dol_use_jmobile != 4)) + { + print "\n"; + print "/* Set google analtics tag */\n"; + print ' var _gaq = _gaq || [];'."\n"; + print ' _gaq.push([\'_setAccount\', \''.$conf->global->MAIN_GOOGLE_AN_ID.'\']);'."\n"; + print ' _gaq.push([\'_trackPageview\']);'."\n"; + print ''."\n"; + print ' (function() {'."\n"; + print ' var ga = document.createElement(\'script\'); ga.type = \'text/javascript\'; ga.async = true;'."\n"; + print ' ga.src = (\'https:\' == document.location.protocol ? \'https://ssl\' : \'http://www\') + \'.google-analytics.com/ga.js\';'."\n"; + print ' var s = document.getElementsByTagName(\'script\')[0]; s.parentNode.insertBefore(ga, s);'."\n"; + print ' })();'."\n"; + } + } + + // End of tuning + if (! empty($_SERVER['MAIN_SHOW_TUNING_INFO']) || ! empty($conf->global->MAIN_SHOW_TUNING_INFO)) + { + print "\n"; + print "/* Add memory info */\n"; + print 'window.console && console.log("'; + if (! empty($conf->global->MEMCACHED_SERVER)) print 'MEMCACHED_SERVER='.$conf->global->MEMCACHED_SERVER.' - '; + print 'MAIN_OPTIMIZE_SPEED='.(isset($conf->global->MAIN_OPTIMIZE_SPEED)?$conf->global->MAIN_OPTIMIZE_SPEED:'off'); + if (! empty($micro_start_time)) // Works only if MAIN_SHOW_TUNING_INFO is defined at $_SERVER level. Not in global variable. + { + $micro_end_time = microtime(true); + print ' - Build time: '.ceil(1000*($micro_end_time-$micro_start_time)).' ms'; + } + if (function_exists("memory_get_usage")) + { + print ' - Mem: '.memory_get_usage(); + } + if (function_exists("xdebug_memory_usage")) + { + print ' - XDebug time: '.ceil(1000*xdebug_time_index()).' ms'; + print ' - XDebug mem: '.xdebug_memory_usage(); + print ' - XDebug mem peak: '.xdebug_peak_memory_usage(); + } + if (function_exists("zend_loader_file_encoded")) + { + print ' - Zend encoded file: '.(zend_loader_file_encoded()?'yes':'no'); + } + print '");'."\n"; + } + + print "\n".''."\n"; } - } - - // End of tuning - if (! empty($_SERVER['MAIN_SHOW_TUNING_INFO']) || ! empty($conf->global->MAIN_SHOW_TUNING_INFO)) - { - print "\n".''."\n"; // Add Xdebug coverage of code if (defined('XDEBUGCOVERAGE')) { print_r(xdebug_get_code_coverage()); } - } - - // If there is some logs in buffer to show - if (count($conf->logbuffer)) - { - print "\n"; - print "\n"; } - //print ''."\n"; - print "End of log output -->\n"; } - - $parameters=array(); - $reshook=$hookmanager->executeHooks('printCommonFooter',$parameters); // Note that $action and $object may have been modified by some hooks } /** diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 29546764f9b..93b4327620b 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1928,101 +1928,23 @@ if (! function_exists("llxFooter")) print ' '."\n"; // End div fiche - if (empty($conf->dol_hide_leftmenu)) print ' '; // End div id-right + if (empty($conf->dol_hide_leftmenu)) print ' '."\n"; // End div id-right + + if (empty($conf->dol_hide_leftmenu) && empty($conf->dol_use_jmobile)) print ' '."\n"; // End div container print "\n"; if ($comment) print ''."\n"; printCommonFooter($zone); - if (empty($conf->dol_hide_leftmenu) && empty($conf->dol_use_jmobile)) print ' '."\n"; // End div container - if (! empty($delayedhtmlcontent)) print $delayedhtmlcontent; - // TODO Move this in lib_head.js.php - - // Wrapper to show tooltips (html or onclick popup) - if (! empty($conf->use_javascript_ajax) && empty($conf->dol_no_mouse_hover)) + if (! empty($conf->use_javascript_ajax)) { - print "\n\n"; - print '' . "\n"; + print "\n".''."\n"; + print ''."\n"; } - - // Wrapper to manage document_preview - if (! empty($conf->use_javascript_ajax) && ($conf->browser->layout != 'phone')) - { - print "\n\n"; - print '' . "\n"; - } - - // Wrapper to manage dropdown - if (! empty($conf->use_javascript_ajax) && ! defined('JS_JQUERY_DISABLE_DROPDOWN')) - { - print "\n\n"; - print ''; - } - + // Wrapper to add log when clicking on download or preview if (! empty($conf->blockedlog->enabled) && is_object($object) && $object->id > 0 && $object->statut > 0) { @@ -2056,7 +1978,6 @@ if (! function_exists("llxFooter")) } } - // A div for the address popup print "\n\n"; print ''."\n";