From 6392c3b6beffdef6383fc01859567a0e1f8a3f4e Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Wed, 12 Aug 2009 21:40:07 +0200 Subject: simplify JavaScript loading Ignore-this: 7637977e042ed8ba7e9e9097f9e9f03f This patch removes the differences between the JavaScript loaded in edit and view modes. * increases the amount of JavaScript that is loaded initially * decreases the number of requests * only one cache for all javascript * all javascript is available in view mode The last point is the most important as it makes a lot of functionality available to plugins working in the view mode. The discussion plugin now can reuse the toolbar code for example. Note: development is part of ICKE 2.0 project http://www.icke-projekt.de darcs-hash:20090812194007-6e07b-c8a71dedf506065a95d8b84b55aafce67810236c.gz --- lib/exe/js.php | 99 +++++++++++++++++---------------------------------- lib/scripts/edit.js | 7 ++-- lib/scripts/script.js | 3 -- 3 files changed, 37 insertions(+), 72 deletions(-) diff --git a/lib/exe/js.php b/lib/exe/js.php index 9bf392e4c..b11dfa6ce 100644 --- a/lib/exe/js.php +++ b/lib/exe/js.php @@ -33,13 +33,11 @@ if(!defined('SIMPLE_TEST')){ function js_out(){ global $conf; global $lang; - $edit = (bool) $_REQUEST['edit']; // edit or preview mode? - $write = (bool) $_REQUEST['write']; // writable? // The generated script depends on some dynamic options - $cache = getCacheName('scripts'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'].$edit.'x'.$write,'.js'); + $cache = getCacheName('scripts'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'],'.js'); - // Array of needed files + // array of core files $files = array( DOKU_INC.'lib/scripts/helpers.js', DOKU_INC.'lib/scripts/events.js', @@ -49,37 +47,33 @@ function js_out(){ DOKU_INC.'lib/scripts/ajax.js', DOKU_INC.'lib/scripts/index.js', DOKU_INC.'lib/scripts/drag.js', - ); - if($edit){ - if($write){ - $files[] = DOKU_INC.'lib/scripts/textselection.js'; - $files[] = DOKU_INC.'lib/scripts/toolbar.js'; - $files[] = DOKU_INC.'lib/scripts/edit.js'; - $files[] = DOKU_INC.'lib/scripts/linkwiz.js'; - } - $files[] = DOKU_INC.'lib/scripts/media.js'; - } - $files[] = DOKU_TPLINC.'script.js'; - - // get possible plugin scripts - $plugins = js_pluginscripts(); + DOKU_INC.'lib/scripts/textselection.js', + DOKU_INC.'lib/scripts/toolbar.js', + DOKU_INC.'lib/scripts/edit.js', + DOKU_INC.'lib/scripts/linkwiz.js', + DOKU_INC.'lib/scripts/media.js', + DOKU_TPLINC.'script.js', + ); + + // add possible plugin scripts and userscript + $files = array_merge($files,js_pluginscripts()); + $files[] = DOKU_CONF.'userscript.js'; // check cache age & handle conditional request header('Cache-Control: public, max-age=3600'); header('Pragma: public'); - if(js_cacheok($cache,array_merge($files,$plugins))){ + if(js_cacheok($cache,$files)){ http_conditionalRequest(filemtime($cache)); if($conf['allowdebug']) header("X-CacheUsed: $cache"); // finally send output if ($conf['gzip_output'] && http_gzip_valid($cache)) { - header('Vary: Accept-Encoding'); - header('Content-Encoding: gzip'); - readfile($cache.".gz"); + header('Vary: Accept-Encoding'); + header('Content-Encoding: gzip'); + readfile($cache.".gz"); } else { - if (!http_sendfile($cache)) readfile($cache); + if (!http_sendfile($cache)) readfile($cache); } - return; } else { http_conditionalRequest(time()); @@ -92,18 +86,15 @@ function js_out(){ print "var DOKU_BASE = '".DOKU_BASE."';"; print "var DOKU_TPL = '".DOKU_TPL."';"; - //FIXME: move thes into LANG - print "var alertText = '".js_escape($lang['qb_alert'])."';"; - print "var notSavedYet = '".js_escape($lang['notsavedyet'])."';"; - print "var reallyDel = '".js_escape($lang['del_confirm'])."';"; - - // load JS strings form plugins - $lang['js']['plugins'] = js_pluginstrings(); - // load JS specific translations $json = new JSON(); + $lang['js']['plugins'] = js_pluginstrings(); echo 'LANG = '.$json->encode($lang['js']).";\n"; + // load toolbar + require_once(DOKU_INC.'inc/toolbar.php'); + toolbar_JSdefines('toolbar'); + // load files foreach($files as $file){ echo "\n\n/* XXXXXXXXXX begin of $file XXXXXXXXXX */\n\n"; @@ -111,41 +102,15 @@ function js_out(){ echo "\n\n/* XXXXXXXXXX end of $file XXXXXXXXXX */\n\n"; } + // init stuff js_runonstart("ajax_qsearch.init('qsearch__in','qsearch__out')"); js_runonstart("addEvent(document,'click',closePopups)"); js_runonstart('addTocToggle()'); - - if($edit){ - // size controls - js_runonstart("initSizeCtl('size__ctl','wiki__text')"); - - if($write){ - require_once(DOKU_INC.'inc/toolbar.php'); - toolbar_JSdefines('toolbar'); - js_runonstart("initToolbar('tool__bar','wiki__text',toolbar)"); - - // add pageleave check - js_runonstart("initChangeCheck('".js_escape($lang['notsavedyet'])."')"); - - // add lock timer - js_runonstart("locktimer.init(".($conf['locktime'] - 60).",'".js_escape($lang['willexpire'])."',".$conf['usedraft'].")"); - } - } - - // load plugin scripts (suppress warnings for missing ones) - foreach($plugins as $plugin){ - if (@file_exists($plugin)) { - echo "\n\n/* XXXXXXXXXX begin of $plugin XXXXXXXXXX */\n\n"; - js_load($plugin); - echo "\n\n/* XXXXXXXXXX end of $plugin XXXXXXXXXX */\n\n"; - } - } - - // load user script - @readfile(DOKU_CONF.'userscript.js'); - - // add scroll event and tooltip rewriting + js_runonstart("initSizeCtl('size__ctl','wiki__text')"); + js_runonstart("initToolbar('tool__bar','wiki__text',toolbar)"); + js_runonstart("initChangeCheck('".js_escape($lang['notsavedyet'])."')"); + js_runonstart("locktimer.init(".($conf['locktime'] - 60).",'".js_escape($lang['willexpire'])."',".$conf['usedraft'].")"); js_runonstart('scrollToMarker()'); js_runonstart('focusMarker()'); @@ -166,11 +131,11 @@ function js_out(){ // finally send output if ($conf['gzip_output']) { - header('Vary: Accept-Encoding'); - header('Content-Encoding: gzip'); - print gzencode($js,9,FORCE_GZIP); + header('Vary: Accept-Encoding'); + header('Content-Encoding: gzip'); + print gzencode($js,9,FORCE_GZIP); } else { - print $js; + print $js; } } diff --git a/lib/scripts/edit.js b/lib/scripts/edit.js index 5320c9419..215e647b5 100644 --- a/lib/scripts/edit.js +++ b/lib/scripts/edit.js @@ -341,9 +341,13 @@ function changeCheck(msg){ * JSnocheck class), add handlers to monitor changes * * Sets focus to the editbox as well + * + * @fixme this is old and crappy code. needs to be redone */ function initChangeCheck(msg){ - if(!document.getElementById){ return false; } + var edit_text = document.getElementById('wiki__text'); + if(!edit_text) return; + // add change check for links var links = document.getElementsByTagName('a'); for(var i=0; i < links.length; i++){ @@ -374,7 +378,6 @@ function initChangeCheck(msg){ btn_prev.onclick = function(){ textChanged = false; }; // add change memory setter - var edit_text = document.getElementById('wiki__text'); edit_text.onchange = function(){ textChanged = true; //global var summaryCheck(); diff --git a/lib/scripts/script.js b/lib/scripts/script.js index be3339525..948375a64 100644 --- a/lib/scripts/script.js +++ b/lib/scripts/script.js @@ -17,9 +17,6 @@ if (clientPC.indexOf('opera')!=-1) { var is_opera_seven = (window.opera && document.childNodes); } -// prepare empty toolbar for checks by lazy plugins -var toolbar = ''; - /** * Handy shortcut to document.getElementById * -- cgit v1.2.3