diff options
author | Guy Brand <gb@unistra.fr> | 2015-08-10 10:03:27 +0200 |
---|---|---|
committer | Guy Brand <gb@unistra.fr> | 2015-08-10 10:03:27 +0200 |
commit | 53a57d16b9c741bb44099fd93bf79efa06796341 (patch) | |
tree | 24a90a50afe9325926c8ebaa2ed90f9fa093e5b9 /lib/exe/js.php | |
parent | cf6e6645c31a9f185cef3fb9452fb188882ede47 (diff) | |
parent | a060d9973e7c1d5051f2cc426937881826e4972e (diff) | |
download | rpg-53a57d16b9c741bb44099fd93bf79efa06796341.tar.gz rpg-53a57d16b9c741bb44099fd93bf79efa06796341.tar.bz2 |
Merge branch master into stable
Diffstat (limited to 'lib/exe/js.php')
-rw-r--r-- | lib/exe/js.php | 98 |
1 files changed, 66 insertions, 32 deletions
diff --git a/lib/exe/js.php b/lib/exe/js.php index bec12ef7a..16d22daf2 100644 --- a/lib/exe/js.php +++ b/lib/exe/js.php @@ -14,7 +14,7 @@ require_once(DOKU_INC.'inc/init.php'); // Main (don't run when UNIT test) if(!defined('SIMPLE_TEST')){ - header('Content-Type: text/javascript; charset=utf-8'); + header('Content-Type: application/javascript; charset=utf-8'); js_out(); } @@ -30,9 +30,14 @@ function js_out(){ global $conf; global $lang; global $config_cascade; + global $INPUT; + + // decide from where to get the template + $tpl = trim(preg_replace('/[^\w-]+/','',$INPUT->str('t'))); + if(!$tpl) $tpl = $conf['template']; // The generated script depends on some dynamic options - $cache = new cache('scripts'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'],'.js'); + $cache = new cache('scripts'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'].DOKU_BASE.$tpl,'.js'); $cache->_event = 'JS_CACHE_USE'; // load minified version for some files @@ -51,11 +56,9 @@ function js_out(){ DOKU_INC.'lib/scripts/delay.js', DOKU_INC.'lib/scripts/cookie.js', DOKU_INC.'lib/scripts/script.js', - DOKU_INC.'lib/scripts/tw-sack.js', DOKU_INC.'lib/scripts/qsearch.js', DOKU_INC.'lib/scripts/tree.js', DOKU_INC.'lib/scripts/index.js', - DOKU_INC.'lib/scripts/drag.js', DOKU_INC.'lib/scripts/textselection.js', DOKU_INC.'lib/scripts/toolbar.js', DOKU_INC.'lib/scripts/edit.js', @@ -63,17 +66,19 @@ function js_out(){ DOKU_INC.'lib/scripts/locktimer.js', DOKU_INC.'lib/scripts/linkwiz.js', DOKU_INC.'lib/scripts/media.js', -# deprecated DOKU_INC.'lib/scripts/compatibility.js', + DOKU_INC.'lib/scripts/compatibility.js', # disabled for FS#1958 DOKU_INC.'lib/scripts/hotkeys.js', DOKU_INC.'lib/scripts/behaviour.js', DOKU_INC.'lib/scripts/page.js', - tpl_incdir().'script.js', + tpl_incdir($tpl).'script.js', ); // add possible plugin scripts and userscript $files = array_merge($files,js_pluginscripts()); - if(isset($config_cascade['userscript']['default'])){ - $files[] = $config_cascade['userscript']['default']; + if(!empty($config_cascade['userscript']['default'])) { + foreach($config_cascade['userscript']['default'] as $userscript) { + $files[] = $userscript; + } } $cache_files = array_merge($files, getConfigFiles('main')); @@ -90,7 +95,7 @@ function js_out(){ $json = new JSON(); // add some global variables print "var DOKU_BASE = '".DOKU_BASE."';"; - print "var DOKU_TPL = '".tpl_basedir()."';"; + print "var DOKU_TPL = '".tpl_basedir($tpl)."';"; print "var DOKU_COOKIE_PARAM = " . $json->encode( array( 'path' => empty($conf['cookiedir']) ? DOKU_REL : $conf['cookiedir'], @@ -102,7 +107,7 @@ function js_out(){ // load JS specific translations $lang['js']['plugins'] = js_pluginstrings(); - $templatestrings = js_templatestrings(); + $templatestrings = js_templatestrings($tpl); if(!empty($templatestrings)) { $lang['js']['template'] = $templatestrings; } @@ -154,9 +159,11 @@ function js_out(){ * Load the given file, handle include calls and print it * * @author Andreas Gohr <andi@splitbrain.org> + * + * @param string $file filename path to file */ function js_load($file){ - if(!@file_exists($file)) return; + if(!file_exists($file)) return; static $loaded = array(); $data = io_readFile($file); @@ -175,7 +182,7 @@ function js_load($file){ if($ifile{0} != '/') $ifile = dirname($file).'/'.$ifile; - if(@file_exists($ifile)){ + if(file_exists($ifile)){ $idata = io_readFile($ifile); }else{ $idata = ''; @@ -189,6 +196,8 @@ function js_load($file){ * Returns a list of possible Plugin Scripts (no existance check here) * * @author Andreas Gohr <andi@splitbrain.org> + * + * @return array */ function js_pluginscripts(){ $list = array(); @@ -206,6 +215,8 @@ function js_pluginscripts(){ * - Nothing is returned for plugins without an entry for $lang['js'] * * @author Gabriel Birke <birke@d-scribe.de> + * + * @return array */ function js_pluginstrings() { global $conf; @@ -213,10 +224,10 @@ function js_pluginstrings() { $plugins = plugin_list(); foreach ($plugins as $p){ if (isset($lang)) unset($lang); - if (@file_exists(DOKU_PLUGIN."$p/lang/en/lang.php")) { + if (file_exists(DOKU_PLUGIN."$p/lang/en/lang.php")) { include DOKU_PLUGIN."$p/lang/en/lang.php"; } - if (isset($conf['lang']) && $conf['lang']!='en' && @file_exists(DOKU_PLUGIN."$p/lang/".$conf['lang']."/lang.php")) { + if (isset($conf['lang']) && $conf['lang']!='en' && file_exists(DOKU_PLUGIN."$p/lang/".$conf['lang']."/lang.php")) { include DOKU_PLUGIN."$p/lang/".$conf['lang']."/lang.php"; } if (isset($lang['js'])) { @@ -231,18 +242,21 @@ function js_pluginstrings() { * * - $lang['js'] must be an array. * - Nothing is returned for template without an entry for $lang['js'] + * + * @param string $tpl + * @return array */ -function js_templatestrings() { +function js_templatestrings($tpl) { global $conf; $templatestrings = array(); - if (@file_exists(tpl_incdir()."lang/en/lang.php")) { - include tpl_incdir()."lang/en/lang.php"; + if (file_exists(tpl_incdir($tpl)."lang/en/lang.php")) { + include tpl_incdir($tpl)."lang/en/lang.php"; } - if (isset($conf['lang']) && $conf['lang']!='en' && @file_exists(tpl_incdir()."lang/".$conf['lang']."/lang.php")) { - include tpl_incdir()."lang/".$conf['lang']."/lang.php"; + if (isset($conf['lang']) && $conf['lang']!='en' && file_exists(tpl_incdir($tpl)."lang/".$conf['lang']."/lang.php")) { + include tpl_incdir($tpl)."lang/".$conf['lang']."/lang.php"; } if (isset($lang['js'])) { - $templatestrings[$conf['template']] = $lang['js']; + $templatestrings[$tpl] = $lang['js']; } return $templatestrings; } @@ -252,6 +266,9 @@ function js_templatestrings() { * as newline * * @author Andreas Gohr <andi@splitbrain.org> + * + * @param string $string + * @return string */ function js_escape($string){ return str_replace('\\\\n','\\n',addslashes($string)); @@ -261,6 +278,8 @@ function js_escape($string){ * Adds the given JavaScript code to the window.onload() event * * @author Andreas Gohr <andi@splitbrain.org> + * + * @param string $func */ function js_runonstart($func){ echo "jQuery(function(){ $func; });".NL; @@ -275,6 +294,9 @@ function js_runonstart($func){ * @author Nick Galbreath <nickg@modp.com> * @author Andreas Gohr <andi@splitbrain.org> * @link http://code.google.com/p/jsstrip/ + * + * @param string $s + * @return string */ function js_compress($s){ $s = ltrim($s); // strip all initial whitespace @@ -289,7 +311,11 @@ function js_compress($s){ // items that don't need spaces next to them $chars = "^&|!+\-*\/%=\?:;,{}()<>% \t\n\r'\"[]"; - $regex_starters = array("(", "=", "[", "," , ":", "!"); + // items which need a space if the sign before and after whitespace is equal. + // E.g. '+ ++' may not be compressed to '+++' --> syntax error. + $ops = "+-"; + + $regex_starters = array("(", "=", "[", "," , ":", "!", "&", "|"); $whitespaces_chars = array(" ", "\t", "\n", "\r", "\0", "\x0B"); @@ -389,19 +415,27 @@ function js_compress($s){ // whitespaces if( $ch == ' ' || $ch == "\r" || $ch == "\n" || $ch == "\t" ){ - // leading spaces - if($i+1 < $slen && (strpos($chars,$s[$i+1]) !== false)){ - $i = $i + 1; - continue; - } - // trailing spaces - // if this ch is space AND the last char processed - // is special, then skip the space $lch = substr($result,-1); - if($lch && (strpos($chars,$lch) !== false)){ - $i = $i + 1; - continue; + + // Only consider deleting whitespace if the signs before and after + // are not equal and are not an operator which may not follow itself. + if ((!$lch || $s[$i+1] == ' ') + || $lch != $s[$i+1] + || strpos($ops,$s[$i+1]) === false) { + // leading spaces + if($i+1 < $slen && (strpos($chars,$s[$i+1]) !== false)){ + $i = $i + 1; + continue; + } + // trailing spaces + // if this ch is space AND the last char processed + // is special, then skip the space + if($lch && (strpos($chars,$lch) !== false)){ + $i = $i + 1; + continue; + } } + // else after all of this convert the "whitespace" to // a single space. It will get appended below $ch = ' '; |