From 8dc652aaa8c4a3a9cfdafdcd4fe539d61f91f134 Mon Sep 17 00:00:00 2001 From: Sam Minnee Date: Fri, 6 Mar 2009 03:10:24 +0000 Subject: [PATCH] BUGFIX: Updated i18n javascript system so that the i18n javascript needs to be explicitly included, so that it doesn't poke its nose in where it's not wanted. git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.3@72563 467b73ca-7a2a-4603-9d3b-597d59a354a9 --- core/Requirements.php | 60 ++++++++++---------------- core/model/SiteTree.php | 1 + forms/AjaxUniqueTextField.php | 1 + forms/ComplexTableField.php | 2 + forms/HasManyComplexTableField.php | 2 +- forms/RestrictedTextField.php | 1 + forms/ScaffoldingComplexTableField.php | 1 + forms/TableField.php | 2 +- forms/TableListField.php | 2 +- forms/TreeDropdownField.php | 1 + forms/TreeMultiselectField.php | 1 + forms/TreeSelectorField.php | 2 +- forms/UniqueTextField.php | 2 +- forms/Validator.php | 3 +- 14 files changed, 36 insertions(+), 45 deletions(-) diff --git a/core/Requirements.php b/core/Requirements.php index 7b6fa71ba..98bf617c5 100644 --- a/core/Requirements.php +++ b/core/Requirements.php @@ -192,12 +192,13 @@ class Requirements { } /** - * Automatically includes the necessary lang-files from the module. + * Add i18n files from the given javascript directory. + * @param $langDir The javascript lang directory, relative to the site root, e.g., 'sapphire/javascript/lang' * - * See {@link Requirements_Backend::process_i18n_javascript()} for more info. + * See {@link Requirements_Backend::add_i18n_javascript()} for more information. */ - protected static function process_i18n_javascript() { - return self::backend()->process_i18n_javascript(); + public static function add_i18n_javascript($langDir) { + return self::backend()->add_i18n_javascript($langDir); } /** @@ -551,7 +552,6 @@ class Requirements_Backend { $jsRequirements = ''; // Combine files - updates $this->javascript and $this->css - $this->process_i18n_javascript(); $this->process_combined_files(); foreach(array_diff_key($this->javascript,$this->blocked) as $file => $dummy) { @@ -638,41 +638,25 @@ class Requirements_Backend { $response->addHeader('X-Include-CSS', implode(',', $cssRequirements)); } - /** - * Automatically includes the necessary lang-files from the module - * according to the locale set in {@link i18n::$current_locale}. - * Assumes that a subfolder /javascript exists relative to the included - * javascript file, with a file named after the locale - - * so usually /javascript/lang/en_US.js. + /** + * Add i18n files from the given javascript directory. Sapphire expects that the given directory + * will contain a number of java script files named by language: en_US.js, de_DE.js, etc. + * @param $langDir The javascript lang directory, relative to the site root, e.g., 'sapphire/javascript/lang' */ - protected function process_i18n_javascript() { - // ensure to include the i18n base library - if( - count(array_diff_key($this->javascript,$this->blocked)) - && !isset($this->javascript[SAPPHIRE_DIR . '/javascript/i18n.js']) - ) { - $this->javascript[THIRDPARTY_DIR . '/prototype.js'] = true; - $this->javascript[SAPPHIRE_DIR . '/javascript/i18n.js'] = true; - } - - // include the specific locale and the master locale for each module - foreach(array_diff_key($this->javascript,$this->blocked) as $file => $dummy) { - if(preg_match('/^http[s]?/', $file)) continue; - - $absolutePath = Director::baseFolder() . '/' . $file; - $absoluteLangPath = dirname($absolutePath) . '/lang/' . i18n::get_locale() . '.js'; - $absoluteDefaultLangPath = dirname($absolutePath) . '/lang/' . i18n::default_locale() . '.js'; - foreach(array($absoluteDefaultLangPath, $absoluteLangPath) as $path) { - if(Director::fileExists($path)) { - $langFile = Director::makeRelative($path); - // Remove rogue leading slashes from Director::makeRelative() - $langFile = preg_replace('/^\//', '', $langFile); - $this->javascript[$langFile] = true; - } - } - } + public function add_i18n_javascript($langDir) { + // Include i18n.js even if no languages are found. The fact that + // add_i18n_javascript() was called indicates that the methods in + // here are needed. + $this->javascript(SAPPHIRE_DIR . '/javascript/i18n.js'); - } + if(substr($langDir,-1) != '/') $langDir .= '/'; + + $defaultLangPath = $langDir . i18n::default_locale() . '.js'; + $langPath = $langDir . i18n::get_locale() . '.js'; + foreach(array($defaultLangPath, $langPath) as $path) { + if(Director::fileExists($path)) $this->javascript($path); + } + } /** * Finds the path for specified file. diff --git a/core/model/SiteTree.php b/core/model/SiteTree.php index 8366f58ac..d5e5e3259 100644 --- a/core/model/SiteTree.php +++ b/core/model/SiteTree.php @@ -1102,6 +1102,7 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid function getCMSFields() { require_once("forms/Form.php"); Requirements::javascript(CMS_DIR . "/javascript/SitetreeAccess.js"); + Requirements::add_i18n_javascript(SAPPHIRE_DIR . '/javascript/lang'); Requirements::javascript(SAPPHIRE_DIR . '/javascript/UpdateURL.js'); // Status / message diff --git a/forms/AjaxUniqueTextField.php b/forms/AjaxUniqueTextField.php index f3ca89f7e..fa221f600 100644 --- a/forms/AjaxUniqueTextField.php +++ b/forms/AjaxUniqueTextField.php @@ -29,6 +29,7 @@ class AjaxUniqueTextField extends TextField { } function Field() { + Requirements::add_i18n_javascript(SAPPHIRE_DIR . '/javascript/lang'); Requirements::javascript(SAPPHIRE_DIR . "/javascript/UniqueFields.js"); $this->jsValidation(); diff --git a/forms/ComplexTableField.php b/forms/ComplexTableField.php index 26e17396d..e9d3194cf 100755 --- a/forms/ComplexTableField.php +++ b/forms/ComplexTableField.php @@ -200,6 +200,7 @@ class ComplexTableField extends TableListField { Requirements::javascript(THIRDPARTY_DIR . "/greybox/AmiJS.js"); Requirements::javascript(THIRDPARTY_DIR . "/greybox/greybox.js"); + Requirements::add_i18n_javascript(SAPPHIRE_DIR . '/javascript/lang'); Requirements::javascript(SAPPHIRE_DIR . '/javascript/TableListField.js'); Requirements::javascript(SAPPHIRE_DIR . "/javascript/ComplexTableField.js"); Requirements::css(THIRDPARTY_DIR . "/greybox/greybox.css"); @@ -960,6 +961,7 @@ class ComplexTableField_Popup extends Form { Requirements::javascript(THIRDPARTY_DIR . "/scriptaculous/scriptaculous.js"); Requirements::javascript(THIRDPARTY_DIR . "/scriptaculous/controls.js"); Requirements::javascript(THIRDPARTY_DIR . "/layout_helpers.js"); + Requirements::add_i18n_javascript(SAPPHIRE_DIR . '/javascript/lang'); Requirements::javascript(CMS_DIR . "/javascript/LeftAndMain.js"); Requirements::javascript(CMS_DIR . "/javascript/LeftAndMain_right.js"); Requirements::javascript(SAPPHIRE_DIR . "/javascript/TableField.js"); diff --git a/forms/HasManyComplexTableField.php b/forms/HasManyComplexTableField.php index 2ad892af2..bde6b69f4 100644 --- a/forms/HasManyComplexTableField.php +++ b/forms/HasManyComplexTableField.php @@ -23,7 +23,7 @@ class HasManyComplexTableField extends ComplexTableField { function __construct($controller, $name, $sourceClass, $fieldList, $detailFormFields = null, $sourceFilter = "", $sourceSort = "", $sourceJoin = "") { parent::__construct($controller, $name, $sourceClass, $fieldList, $detailFormFields, $sourceFilter, $sourceSort, $sourceJoin); - Requirements::javascript(SAPPHIRE_DIR . "/javascript/i18n.js"); + Requirements::add_i18n_javascript(SAPPHIRE_DIR . '/javascript/lang'); Requirements::javascript(SAPPHIRE_DIR . "/javascript/HasManyFileField.js"); Requirements::javascript(SAPPHIRE_DIR . '/javascript/RelationComplexTableField.js'); Requirements::css(SAPPHIRE_DIR . '/css/HasManyFileField.css'); diff --git a/forms/RestrictedTextField.php b/forms/RestrictedTextField.php index 0e5744057..8516cb930 100755 --- a/forms/RestrictedTextField.php +++ b/forms/RestrictedTextField.php @@ -15,6 +15,7 @@ class RestrictedTextField extends TextField { } function Field() { + Requirements::add_i18n_javascript(SAPPHIRE_DIR . '/javascript/lang'); Requirements::javascript( SAPPHIRE_DIR . '/javascript/UniqueFields.js' ); if($this->maxLength){ diff --git a/forms/ScaffoldingComplexTableField.php b/forms/ScaffoldingComplexTableField.php index 9497feb22..f7656729a 100644 --- a/forms/ScaffoldingComplexTableField.php +++ b/forms/ScaffoldingComplexTableField.php @@ -32,6 +32,7 @@ class ScaffoldingComplexTableField_Popup extends Form { Requirements::javascript(THIRDPARTY_DIR . "/scriptaculous/scriptaculous.js"); Requirements::javascript(THIRDPARTY_DIR . "/scriptaculous/controls.js"); Requirements::javascript(THIRDPARTY_DIR . "/layout_helpers.js"); + Requirements::add_i18n_javascript(SAPPHIRE_DIR . '/javascript/lang'); Requirements::javascript(CMS_DIR . "/javascript/LeftAndMain.js"); Requirements::javascript(CMS_DIR . "/javascript/LeftAndMain_right.js"); Requirements::javascript(SAPPHIRE_DIR . "/javascript/TableField.js"); diff --git a/forms/TableField.php b/forms/TableField.php index 0fbe99995..b5393939a 100644 --- a/forms/TableField.php +++ b/forms/TableField.php @@ -114,7 +114,7 @@ class TableField extends TableListField { } parent::__construct($name, $sourceClass, $fieldList, $sourceFilter, $sourceSort, $sourceJoin); - Requirements::javascript(SAPPHIRE_DIR . "/javascript/i18n.js"); + Requirements::add_i18n_javascript(SAPPHIRE_DIR . '/javascript/lang'); Requirements::javascript(SAPPHIRE_DIR . '/javascript/TableField.js'); } diff --git a/forms/TableListField.php b/forms/TableListField.php index e1f9fe4db..802053198 100755 --- a/forms/TableListField.php +++ b/forms/TableListField.php @@ -247,7 +247,7 @@ class TableListField extends FormField { Requirements::javascript(THIRDPARTY_DIR . '/behaviour.js'); Requirements::javascript(THIRDPARTY_DIR . '/prototype_improvements.js'); Requirements::javascript(THIRDPARTY_DIR . '/scriptaculous/effects.js'); - Requirements::javascript(SAPPHIRE_DIR . "/javascript/i18n.js"); + Requirements::add_i18n_javascript(SAPPHIRE_DIR . '/javascript/lang'); Requirements::javascript(SAPPHIRE_DIR . '/javascript/TableListField.js'); Requirements::css(SAPPHIRE_DIR . '/css/TableListField.css'); } diff --git a/forms/TreeDropdownField.php b/forms/TreeDropdownField.php index ecb1221dc..5e13532b2 100755 --- a/forms/TreeDropdownField.php +++ b/forms/TreeDropdownField.php @@ -37,6 +37,7 @@ class TreeDropdownField extends FormField { Requirements::css(SAPPHIRE_DIR . '/css/TreeDropdownField.css'); Requirements::javascript(THIRDPARTY_DIR . "/tree/tree.js"); Requirements::css(THIRDPARTY_DIR . "/tree/tree.css"); + Requirements::add_i18n_javascript(SAPPHIRE_DIR . '/javascript/lang'); Requirements::javascript(SAPPHIRE_DIR . "/javascript/TreeSelectorField.js"); if($this->value) { diff --git a/forms/TreeMultiselectField.php b/forms/TreeMultiselectField.php index ac1b74b2d..0fa7bb735 100755 --- a/forms/TreeMultiselectField.php +++ b/forms/TreeMultiselectField.php @@ -29,6 +29,7 @@ class TreeMultiselectField extends TreeDropdownField { function Field() { $value = ''; $itemList = ''; + Requirements::add_i18n_javascript(SAPPHIRE_DIR . '/javascript/lang'); Requirements::javascript(SAPPHIRE_DIR . "/javascript/TreeSelectorField.js"); $items = $this->getItems(); diff --git a/forms/TreeSelectorField.php b/forms/TreeSelectorField.php index becf70a25..cae75fc38 100755 --- a/forms/TreeSelectorField.php +++ b/forms/TreeSelectorField.php @@ -13,7 +13,7 @@ class TreeSelectorField extends FormField { } function Field() { - Requirements::javascript(SAPPHIRE_DIR . "/javascript/i18n.js"); + Requirements::add_i18n_javascript(SAPPHIRE_DIR . '/javascript/lang'); Requirements::javascript(SAPPHIRE_DIR . "/javascript/TreeSelectorField.js"); $fieldName = $this->name; diff --git a/forms/UniqueTextField.php b/forms/UniqueTextField.php index 36e0eb68b..ae416c5e1 100755 --- a/forms/UniqueTextField.php +++ b/forms/UniqueTextField.php @@ -24,7 +24,7 @@ class UniqueTextField extends TextField { } function Field() { - Requirements::javascript(SAPPHIRE_DIR . "/javascript/i18n.js"); + Requirements::add_i18n_javascript(SAPPHIRE_DIR . '/javascript/lang'); Requirements::javascript(SAPPHIRE_DIR . "/javascript/UniqueFields.js"); /* diff --git a/forms/Validator.php b/forms/Validator.php index 9bf63393b..f1a2db77a 100755 --- a/forms/Validator.php +++ b/forms/Validator.php @@ -153,8 +153,7 @@ abstract class Validator extends Object { Requirements::javascript(THIRDPARTY_DIR . "/prototype.js"); Requirements::javascript(THIRDPARTY_DIR . "/behaviour.js"); Requirements::javascript(THIRDPARTY_DIR . "/prototype_improvements.js"); - //Requirements::add_i18n_javascript(SAPPHIRE_DIR); - Requirements::javascript(SAPPHIRE_DIR . "/javascript/i18n.js"); + Requirements::add_i18n_javascript(SAPPHIRE_DIR . '/javascript/lang'); Requirements::javascript(SAPPHIRE_DIR . "/javascript/Validator.js"); $code = $this->javascript();