From: <jon...@us...> - 2011-08-18 12:30:55
|
Revision: 36314 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=36314&view=rev Author: jonnybradley Date: 2011-08-18 12:30:48 +0000 (Thu, 18 Aug 2011) Log Message: ----------- [FIX] rename setup/js_detect.php to setup/javascript.php as it does so much more than just detect Modified Paths: -------------- trunk/lib/smarty_tiki/prefilter.jq.php trunk/lib/tiki-js.js trunk/tiki-setup.php Added Paths: ----------- trunk/lib/setup/javascript.php Removed Paths: ------------- trunk/lib/setup/js_detect.php Copied: trunk/lib/setup/javascript.php (from rev 36311, trunk/lib/setup/js_detect.php) =================================================================== --- trunk/lib/setup/javascript.php (rev 0) +++ trunk/lib/setup/javascript.php 2011-08-18 12:30:48 UTC (rev 36314) @@ -0,0 +1,204 @@ +<?php +// (c) Copyright 2002-2011 by authors of the Tiki Wiki CMS Groupware Project +// +// All Rights Reserved. See copyright.txt for details and a complete list of authors. +// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. +// $Id$ + +//this script may only be included - so its better to die if called directly. +$access->check_script($_SERVER["SCRIPT_NAME"],basename(__FILE__)); + +// Javascript auto-detection +// (to be able to generate non-javascript code if there is no javascript, when noscript tag is not useful enough) +// It uses cookies instead of session vars to keep the correct value after a session timeout + +if ($prefs['disableJavascript'] == 'y' ) { + $prefs['javascript_enabled'] = 'n'; +} elseif ( isset($_COOKIE['javascript_enabled']) ) { + // Update the pref with the cookie value + $prefs['javascript_enabled'] = $_COOKIE['javascript_enabled']; +} else { + // Set the cookie to 'n', through PHP / HTTP headers + $prefs['javascript_enabled'] = 'n'; +} + +if ( $prefs['javascript_enabled'] != 'y' && $prefs['disableJavascript'] != 'y' ) { + // Set the cookie to 'y', through javascript (will override the above cookie set to 'n' and sent by PHP / HTTP headers) - duration: approx. 1 year + $headerlib->add_js("var jsedate = new Date();\njsedate.setTime(" . ( 1000 * ( $tikilib->now + 365 * 24 * 3600 ) ) . ");\nsetCookieBrowser('javascript_enabled', 'y', null, jsedate);"); + + // the first and second time, we should not trust the absence of javascript_enabled cookie yet, as it could be a redirection and the js will not get a chance to run yet, so we wait until the third run, assuming that js is on before then + if ( !isset($_COOKIE['runs_before_js_detect']) ) { + $prefs['javascript_enabled'] = 'y'; + setcookie( 'runs_before_js_detect', '2', $tikilib->now + 365 * 24 * 3600 ); + } elseif ( $_COOKIE['runs_before_js_detect'] > 0 ) { + $prefs['javascript_enabled'] = 'y'; + setcookie( 'runs_before_js_detect', $_COOKIE['runs_before_js_detect'] - 1, $tikilib->now + 365 * 24 * 3600 ); + } +} +if ($prefs['javascript_enabled'] == 'n') { + // disable js dependant features + $prefs['feature_tabs'] = 'n'; + $prefs['feature_jquery'] = 'n'; + $prefs['feature_shadowbox'] = 'n'; + $prefs['feature_wysiwyg'] = 'n'; + $prefs['feature_ajax'] = 'n'; +} + +if ($prefs['javascript_enabled'] == 'y') { // we have JavaScript + + $prefs['feature_jquery'] = 'y'; // just in case + + // load translations lang object from /lang/xx/language.js if there + if (file_exists('lang/' . $prefs['language'] . '/language.js')) { + // after the usual lib includes (up to 10) but before custom.js (50) + $headerlib->add_jsfile('lang/' . $prefs['language'] . '/language.js', 25); + } + + /** Use custom.js in styles or options dir if there **/ + $custom_js = $tikilib->get_style_path($prefs['style'], $prefs['style_option'], 'custom.js'); + if (!empty($custom_js)) { + $headerlib->add_jsfile($custom_js, 50); + } else { // there's no custom.js in the current style or option + $custom_js = $tikilib->get_style_path('', '', 'custom.js'); // so use one in the root of /styles if there + if (!empty($custom_js)) { + $headerlib->add_jsfile($custom_js, 50); + } + } + + // setup timezone array + $tz = array_keys(DateTimeZone::listAbbreviations()); + $headerlib->add_js(' +function inArray(item, array) { + for (var i in array) { + if (array[i] === item) { + return i; + } + } + return false; +} +var allTimeZoneCodes = ' . json_encode(array_map("strtoupper", $tz)) . '; +var local_tz = ""; +var now = new Date(); +var now_string = now.toString(); +var m = now_string.match(/[ \(]([A-Z]{3,6})[ \)]?[ \d]*$/); // try three or more char tz first at the end or just before the year +if (!m) { + m = now_string.match(/[ \(]([A-Z]{1,6})[ \)]?[ \d]*$/); // might be a "military" one if not +} +if (m) { + m = m[1]; +} else { // IE (sometimes) gives UTC +offset instead of the abbreviation + // sadly this workaround will fail for non-whole hour offsets + var hours = - now.getTimezoneOffset() / 60; + m = "GMT" + (hours > 0 ? "+" : "") + hours; +} +// Etc/GMT+ is equivalent to GMT- +if (m.substring(0,4) == "GMT+") { + m = "Etc/GMT-" + m.substring(4); +} +if (m.substring(0,4) == "GMT-") { + m = "Etc/GMT+" + m.substring(4); +} +if (inArray(m, allTimeZoneCodes)) { + local_tz = m; +} else { + local_tz = "UTC"; +} +setCookie("local_tz", local_tz); +'); + + $js = ' +// JS Object to hold prefs for jq +var jqueryTiki = new Object(); +jqueryTiki.ui = '.($prefs['feature_jquery_ui'] == 'y' ? 'true' : 'false') . '; +jqueryTiki.ui_theme = "'.$prefs['feature_jquery_ui_theme'].'"; +jqueryTiki.tooltips = '.($prefs['feature_jquery_tooltips'] == 'y' ? 'true' : 'false') . '; +jqueryTiki.autocomplete = '.($prefs['feature_jquery_autocomplete'] == 'y' ? 'true' : 'false') . '; +jqueryTiki.superfish = '.($prefs['feature_jquery_superfish'] == 'y' ? 'true' : 'false') . '; +jqueryTiki.replection = '.($prefs['feature_jquery_reflection'] == 'y' ? 'true' : 'false') . '; +jqueryTiki.tablesorter = '.($prefs['feature_jquery_tablesorter'] == 'y' ? 'true' : 'false') . '; +jqueryTiki.colorbox = '.($prefs['feature_shadowbox'] == 'y' ? 'true' : 'false') . '; +jqueryTiki.cboxCurrent = "{current} / {total}"; +jqueryTiki.sheet = '.($prefs['feature_sheet'] == 'y' ? 'true' : 'false') . '; +jqueryTiki.carousel = '.($prefs['feature_jquery_carousel'] == 'y' ? 'true' : 'false') . '; +jqueryTiki.validate = '.($prefs['feature_jquery_validation'] == 'y' ? 'true' : 'false') . '; + +jqueryTiki.effect = "'.$prefs['jquery_effect'].'"; // Default effect +jqueryTiki.effect_direction = "'.$prefs['jquery_effect_direction'].'"; // "horizontal" | "vertical" etc +jqueryTiki.effect_speed = '.($prefs['jquery_effect_speed'] == 'normal' ? '400' : '"'.$prefs['jquery_effect_speed'].'"').'; // "slow" | "normal" | "fast" | milliseconds (int) ] +jqueryTiki.effect_tabs = "'.$prefs['jquery_effect_tabs'].'"; // Different effect for tabs +jqueryTiki.effect_tabs_direction = "'.$prefs['jquery_effect_tabs_direction'].'"; +jqueryTiki.effect_tabs_speed = '.($prefs['jquery_effect_tabs_speed'] == 'normal' ? '400' : '"'.$prefs['jquery_effect_tabs_speed'].'"').'; + +jqueryTiki.autosave = '.($prefs['ajax_autosave'] == 'y' ? 'true' : 'false') . '; +jqueryTiki.sefurl = '.($prefs['feature_sefurl'] == 'y' ? 'true' : 'false') . '; +jqueryTiki.ajax = '.($prefs['feature_ajax'] == 'y' ? 'true' : 'false') . '; +jqueryTiki.syntaxHighlighter = '.($prefs['feature_syntax_highlighter'] == 'y' ? 'true' : 'false') . '; +'; // NB replace "normal" speeds with int to workaround issue with jQuery 1.4.2 + + if ($prefs['mobile_feature'] === 'y' && $prefs['mobile_mode'] === 'y') { + $js .= ' +// overrides for prefs for jq in mobile mode +jqueryTiki.ui = false; +jqueryTiki.ui_theme = ""; +jqueryTiki.tooltips = false; +jqueryTiki.autocomplete = false; +jqueryTiki.superfish = false; +jqueryTiki.colorbox = false; +jqueryTiki.tablesorter = false; +'; + if ($prefs['feature_ajax'] !== 'y') { + $headerlib->add_js_config('var mobile_ajaxEnabled = false;'); + } + } + + if ($prefs['feature_syntax_highlighter'] !== 'y') { + // add a dummy syntaxHighlighter object as it seems to be used all over the place without checking for the feature + $js .= ' +var syntaxHighlighter = { + ready: function(textarea, settings) { return null; }, + sync: function(textarea) { return null; }, + add: function(editor, $input, none, skipResize) { return null; }, + remove: function($input) { return null; }, + get: function($input) { return null; }, + fullscreen: function(textarea) { return null; }, + find: function(textareaEditor, val) { return null; }, + searchCursor: [], + replace: function(textareaEditor, val, replaceVal) { return null; }, + insertAt: function(textareaEditor, replaceString, perLine, blockLevel) { return null; } +}; +'; + } + + $headerlib->add_js($js, 100); + + if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6') !== false) { + + $smarty->assign('ie6', true); + + if ($prefs['feature_iepngfix'] == 'y') { + /** + * \brief another attempt for PNG alpha transparency fix which seems to work best for IE6 and can be applied even on background positioned images + * + * is applied explicitly on defined CSS selectors or HTMLDomElement + * + */ + if (($fixoncss = $prefs['iepngfix_selectors']) == '') { + $fixoncss = '#sitelogo a img'; + } + if (($fixondom = $prefs['iepngfix_elements']) != '') { + $fixondom = "DD_belatedPNG.fixPng($fixondom); // list of HTMLDomElements to fix separated by commas (default is none)"; + } + $scriptpath = 'lib/iepngfix/DD_belatedPNG-min.js'; + $headerlib->add_jsfile ($scriptpath, 200); + $headerlib->add_js (<<<JS +DD_belatedPNG.fix('$fixoncss'); // list of CSS selectors to fix separated by commas (default is set to fix sitelogo) +$fixondom +JS + ); + } + } +} + +if ($prefs['feature_ajax'] != 'y') { + $prefs['ajax_autosave'] = 'n'; +} Property changes on: trunk/lib/setup/javascript.php ___________________________________________________________________ Added: svn:keywords + Id Deleted: trunk/lib/setup/js_detect.php =================================================================== --- trunk/lib/setup/js_detect.php 2011-08-18 12:27:41 UTC (rev 36313) +++ trunk/lib/setup/js_detect.php 2011-08-18 12:30:48 UTC (rev 36314) @@ -1,204 +0,0 @@ -<?php -// (c) Copyright 2002-2011 by authors of the Tiki Wiki CMS Groupware Project -// -// All Rights Reserved. See copyright.txt for details and a complete list of authors. -// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. -// $Id$ - -//this script may only be included - so its better to die if called directly. -$access->check_script($_SERVER["SCRIPT_NAME"],basename(__FILE__)); - -// Javascript auto-detection -// (to be able to generate non-javascript code if there is no javascript, when noscript tag is not useful enough) -// It uses cookies instead of session vars to keep the correct value after a session timeout - -if ($prefs['disableJavascript'] == 'y' ) { - $prefs['javascript_enabled'] = 'n'; -} elseif ( isset($_COOKIE['javascript_enabled']) ) { - // Update the pref with the cookie value - $prefs['javascript_enabled'] = $_COOKIE['javascript_enabled']; -} else { - // Set the cookie to 'n', through PHP / HTTP headers - $prefs['javascript_enabled'] = 'n'; -} - -if ( $prefs['javascript_enabled'] != 'y' && $prefs['disableJavascript'] != 'y' ) { - // Set the cookie to 'y', through javascript (will override the above cookie set to 'n' and sent by PHP / HTTP headers) - duration: approx. 1 year - $headerlib->add_js("var jsedate = new Date();\njsedate.setTime(" . ( 1000 * ( $tikilib->now + 365 * 24 * 3600 ) ) . ");\nsetCookieBrowser('javascript_enabled', 'y', null, jsedate);"); - - // the first and second time, we should not trust the absence of javascript_enabled cookie yet, as it could be a redirection and the js will not get a chance to run yet, so we wait until the third run, assuming that js is on before then - if ( !isset($_COOKIE['runs_before_js_detect']) ) { - $prefs['javascript_enabled'] = 'y'; - setcookie( 'runs_before_js_detect', '2', $tikilib->now + 365 * 24 * 3600 ); - } elseif ( $_COOKIE['runs_before_js_detect'] > 0 ) { - $prefs['javascript_enabled'] = 'y'; - setcookie( 'runs_before_js_detect', $_COOKIE['runs_before_js_detect'] - 1, $tikilib->now + 365 * 24 * 3600 ); - } -} -if ($prefs['javascript_enabled'] == 'n') { - // disable js dependant features - $prefs['feature_tabs'] = 'n'; - $prefs['feature_jquery'] = 'n'; - $prefs['feature_shadowbox'] = 'n'; - $prefs['feature_wysiwyg'] = 'n'; - $prefs['feature_ajax'] = 'n'; -} - -if ($prefs['javascript_enabled'] == 'y') { // we have JavaScript - - $prefs['feature_jquery'] = 'y'; // just in case - - // load translations lang object from /lang/xx/language.js if there - if (file_exists('lang/' . $prefs['language'] . '/language.js')) { - // after the usual lib includes (up to 10) but before custom.js (50) - $headerlib->add_jsfile('lang/' . $prefs['language'] . '/language.js', 25); - } - - /** Use custom.js in styles or options dir if there **/ - $custom_js = $tikilib->get_style_path($prefs['style'], $prefs['style_option'], 'custom.js'); - if (!empty($custom_js)) { - $headerlib->add_jsfile($custom_js, 50); - } else { // there's no custom.js in the current style or option - $custom_js = $tikilib->get_style_path('', '', 'custom.js'); // so use one in the root of /styles if there - if (!empty($custom_js)) { - $headerlib->add_jsfile($custom_js, 50); - } - } - - // setup timezone array - $tz = array_keys(DateTimeZone::listAbbreviations()); - $headerlib->add_js(' -function inArray(item, array) { - for (var i in array) { - if (array[i] === item) { - return i; - } - } - return false; -} -var allTimeZoneCodes = ' . json_encode(array_map("strtoupper", $tz)) . '; -var local_tz = ""; -var now = new Date(); -var now_string = now.toString(); -var m = now_string.match(/[ \(]([A-Z]{3,6})[ \)]?[ \d]*$/); // try three or more char tz first at the end or just before the year -if (!m) { - m = now_string.match(/[ \(]([A-Z]{1,6})[ \)]?[ \d]*$/); // might be a "military" one if not -} -if (m) { - m = m[1]; -} else { // IE (sometimes) gives UTC +offset instead of the abbreviation - // sadly this workaround will fail for non-whole hour offsets - var hours = - now.getTimezoneOffset() / 60; - m = "GMT" + (hours > 0 ? "+" : "") + hours; -} -// Etc/GMT+ is equivalent to GMT- -if (m.substring(0,4) == "GMT+") { - m = "Etc/GMT-" + m.substring(4); -} -if (m.substring(0,4) == "GMT-") { - m = "Etc/GMT+" + m.substring(4); -} -if (inArray(m, allTimeZoneCodes)) { - local_tz = m; -} else { - local_tz = "UTC"; -} -setCookie("local_tz", local_tz); -'); - - $js = ' -// JS Object to hold prefs for jq -var jqueryTiki = new Object(); -jqueryTiki.ui = '.($prefs['feature_jquery_ui'] == 'y' ? 'true' : 'false') . '; -jqueryTiki.ui_theme = "'.$prefs['feature_jquery_ui_theme'].'"; -jqueryTiki.tooltips = '.($prefs['feature_jquery_tooltips'] == 'y' ? 'true' : 'false') . '; -jqueryTiki.autocomplete = '.($prefs['feature_jquery_autocomplete'] == 'y' ? 'true' : 'false') . '; -jqueryTiki.superfish = '.($prefs['feature_jquery_superfish'] == 'y' ? 'true' : 'false') . '; -jqueryTiki.replection = '.($prefs['feature_jquery_reflection'] == 'y' ? 'true' : 'false') . '; -jqueryTiki.tablesorter = '.($prefs['feature_jquery_tablesorter'] == 'y' ? 'true' : 'false') . '; -jqueryTiki.colorbox = '.($prefs['feature_shadowbox'] == 'y' ? 'true' : 'false') . '; -jqueryTiki.cboxCurrent = "{current} / {total}"; -jqueryTiki.sheet = '.($prefs['feature_sheet'] == 'y' ? 'true' : 'false') . '; -jqueryTiki.carousel = '.($prefs['feature_jquery_carousel'] == 'y' ? 'true' : 'false') . '; -jqueryTiki.validate = '.($prefs['feature_jquery_validation'] == 'y' ? 'true' : 'false') . '; - -jqueryTiki.effect = "'.$prefs['jquery_effect'].'"; // Default effect -jqueryTiki.effect_direction = "'.$prefs['jquery_effect_direction'].'"; // "horizontal" | "vertical" etc -jqueryTiki.effect_speed = '.($prefs['jquery_effect_speed'] == 'normal' ? '400' : '"'.$prefs['jquery_effect_speed'].'"').'; // "slow" | "normal" | "fast" | milliseconds (int) ] -jqueryTiki.effect_tabs = "'.$prefs['jquery_effect_tabs'].'"; // Different effect for tabs -jqueryTiki.effect_tabs_direction = "'.$prefs['jquery_effect_tabs_direction'].'"; -jqueryTiki.effect_tabs_speed = '.($prefs['jquery_effect_tabs_speed'] == 'normal' ? '400' : '"'.$prefs['jquery_effect_tabs_speed'].'"').'; - -jqueryTiki.autosave = '.($prefs['ajax_autosave'] == 'y' ? 'true' : 'false') . '; -jqueryTiki.sefurl = '.($prefs['feature_sefurl'] == 'y' ? 'true' : 'false') . '; -jqueryTiki.ajax = '.($prefs['feature_ajax'] == 'y' ? 'true' : 'false') . '; -jqueryTiki.syntaxHighlighter = '.($prefs['feature_syntax_highlighter'] == 'y' ? 'true' : 'false') . '; -'; // NB replace "normal" speeds with int to workaround issue with jQuery 1.4.2 - - if ($prefs['mobile_feature'] === 'y' && $prefs['mobile_mode'] === 'y') { - $js .= ' -// overrides for prefs for jq in mobile mode -jqueryTiki.ui = false; -jqueryTiki.ui_theme = ""; -jqueryTiki.tooltips = false; -jqueryTiki.autocomplete = false; -jqueryTiki.superfish = false; -jqueryTiki.colorbox = false; -jqueryTiki.tablesorter = false; -'; - if ($prefs['feature_ajax'] !== 'y') { - $headerlib->add_js_config('var mobile_ajaxEnabled = false;'); - } - } - - if ($prefs['feature_syntax_highlighter'] !== 'y') { - // add a dummy syntaxHighlighter object as it seems to be used all over the place without checking for the feature - $js .= ' -var syntaxHighlighter = { - ready: function(textarea, settings) { return null; }, - sync: function(textarea) { return null; }, - add: function(editor, $input, none, skipResize) { return null; }, - remove: function($input) { return null; }, - get: function($input) { return null; }, - fullscreen: function(textarea) { return null; }, - find: function(textareaEditor, val) { return null; }, - searchCursor: [], - replace: function(textareaEditor, val, replaceVal) { return null; }, - insertAt: function(textareaEditor, replaceString, perLine, blockLevel) { return null; } -}; -'; - } - - $headerlib->add_js($js, 100); - - if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6') !== false) { - - $smarty->assign('ie6', true); - - if ($prefs['feature_iepngfix'] == 'y') { - /** - * \brief another attempt for PNG alpha transparency fix which seems to work best for IE6 and can be applied even on background positioned images - * - * is applied explicitly on defined CSS selectors or HTMLDomElement - * - */ - if (($fixoncss = $prefs['iepngfix_selectors']) == '') { - $fixoncss = '#sitelogo a img'; - } - if (($fixondom = $prefs['iepngfix_elements']) != '') { - $fixondom = "DD_belatedPNG.fixPng($fixondom); // list of HTMLDomElements to fix separated by commas (default is none)"; - } - $scriptpath = 'lib/iepngfix/DD_belatedPNG-min.js'; - $headerlib->add_jsfile ($scriptpath, 200); - $headerlib->add_js (<<<JS -DD_belatedPNG.fix('$fixoncss'); // list of CSS selectors to fix separated by commas (default is set to fix sitelogo) -$fixondom -JS - ); - } - } -} - -if ($prefs['feature_ajax'] != 'y') { - $prefs['ajax_autosave'] = 'n'; -} Modified: trunk/lib/smarty_tiki/prefilter.jq.php =================================================================== --- trunk/lib/smarty_tiki/prefilter.jq.php 2011-08-18 12:27:41 UTC (rev 36313) +++ trunk/lib/smarty_tiki/prefilter.jq.php 2011-08-18 12:30:48 UTC (rev 36314) @@ -16,7 +16,7 @@ * @param $source from smarty (raw) * @return unknown_type * - * Doesn't check $prefs['feature_jquery'] here as prefilter only loaded if enabled (in js_detect.php) + * Doesn't check $prefs['feature_jquery'] here as prefilter only loaded if enabled (in lib/setup/javascript.php) */ function smarty_prefilter_jq($source) { Modified: trunk/lib/tiki-js.js =================================================================== --- trunk/lib/tiki-js.js 2011-08-18 12:27:41 UTC (rev 36313) +++ trunk/lib/tiki-js.js 2011-08-18 12:30:48 UTC (rev 36314) @@ -978,7 +978,7 @@ } // flipWithSign() // Set client timezone -// moved to js_detect.php +// moved to lib/setup/javascript.php //function added for use in navigation dropdown //example : Modified: trunk/tiki-setup.php =================================================================== --- trunk/tiki-setup.php 2011-08-18 12:27:41 UTC (rev 36313) +++ trunk/tiki-setup.php 2011-08-18 12:30:48 UTC (rev 36314) @@ -78,7 +78,7 @@ } require_once ('lib/setup/cookies.php'); -require_once ('lib/setup/js_detect.php'); +require_once ('lib/setup/javascript.php'); require_once ('lib/setup/user_prefs.php'); require_once ('lib/setup/language.php'); require_once ('lib/setup/wiki.php'); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |