Merge branch 'MDL-60209-master-mathjaxlib' of git://github.com/mudrd8mz/moodle

This commit is contained in:
Eloy Lafuente (stronk7) 2017-10-12 01:52:47 +02:00
commit b43a99ad92
6 changed files with 120 additions and 51 deletions

View File

@ -131,5 +131,14 @@ function xmldb_filter_mathjaxloader_upgrade($oldversion) {
upgrade_plugin_savepoint(true, 2017091900, 'filter', 'mathjaxloader');
}
if ($oldversion < 2017100900) {
// Update the MathJax CDN URL to the new default if the site has been using default value.
$httpsurl = get_config('filter_mathjaxloader', 'httpsurl');
if ($httpsurl === 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js') {
set_config('httpsurl', 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js', 'filter_mathjaxloader');
}
upgrade_plugin_savepoint(true, 2017100900, 'filter', 'mathjaxloader');
}
return true;
}

View File

@ -36,55 +36,39 @@ class filter_mathjaxloader extends moodle_text_filter {
* @return string The MathJax language code.
*/
public function map_language_code($moodlelangcode) {
$mathjaxlangcodes = array('br',
'cdo',
'cs',
'da',
'de',
'en',
'eo',
'es',
'fa',
'fi',
'fr',
'gl',
'he',
'ia',
'it',
'ja',
'ko',
'lb',
'mk',
'nl',
'oc',
'pl',
'pt',
'pt-br',
'ru',
'sl',
'sv',
'tr',
'uk',
'zh-hans');
$exceptions = array('cz' => 'cs');
// First see if this is an exception.
if (isset($exceptions[$moodlelangcode])) {
$moodlelangcode = $exceptions[$moodlelangcode];
// List of language codes found in the MathJax/localization/ directory.
$mathjaxlangcodes = [
'ar', 'ast', 'bcc', 'bg', 'br', 'ca', 'cdo', 'ce', 'cs', 'cy', 'da', 'de', 'diq', 'en', 'eo', 'es', 'fa',
'fi', 'fr', 'gl', 'he', 'ia', 'it', 'ja', 'kn', 'ko', 'lb', 'lki', 'lt', 'mk', 'nl', 'oc', 'pl', 'pt',
'pt-br', 'qqq', 'ru', 'scn', 'sco', 'sk', 'sl', 'sv', 'th', 'tr', 'uk', 'vi', 'zh-hans', 'zh-hant'
];
// List of explicit mappings and known exceptions (moodle => mathjax).
$explicit = [
'cz' => 'cs',
'pt_br' => 'pt-br',
'zh_tw' => 'zh-hant',
'zh_cn' => 'zh-hans',
];
// If defined, explicit mapping takes the highest precedence.
if (isset($explicit[$moodlelangcode])) {
return $explicit[$moodlelangcode];
}
// Now look for an exact lang string match.
// If there is exact match, it will be probably right.
if (in_array($moodlelangcode, $mathjaxlangcodes)) {
return $moodlelangcode;
}
// Now try shortening the moodle lang string.
$moodlelangcode = preg_replace('/-.*/', '', $moodlelangcode);
// Look for a match on the shortened string.
if (in_array($moodlelangcode, $mathjaxlangcodes)) {
return $moodlelangcode;
// Finally try to find the best matching mathjax pack.
$parts = explode('_', $moodlelangcode, 2);
if (in_array($parts[0], $mathjaxlangcodes)) {
return $parts[0];
}
// All failed - use english.
// No more guessing, use English.
return 'en';
}

View File

@ -1,15 +1,19 @@
Description of MathJAX library integration in Moodle
=========================================================================================
====================================================
License: Apache 2.0
Source: http://www.mathjax.org
* Default MathJax version: 2.7.2
* License: Apache 2.0
* Source: https://www.mathjax.org/
Moodle maintainer: Damyon Wiese
=========================================================================================
This library is not shipped with Moodle, but this filter is provided, which can be used to
correctly load MathJax into a page from the CDN. Alternatively you can download the entire
library and install it locally, then use this filter to load that local version.
The only changes required to this filter to handle different MathJax versions is to update
the default CDN urls in settings.php - and update the list of language mappings - in filter.php.
Upgrading the default MathJax version
-------------------------------------
1. Update the default CDN URL in settings.php
2. Perform an upgrade step to change the configured URL if it matches the
previous default.
3. Check and eventually update the list of language mappings in filter.php.
Also see the unit test for the language mappings.

View File

@ -33,7 +33,7 @@ if ($ADMIN->fulltree) {
$item = new admin_setting_configtext('filter_mathjaxloader/httpsurl',
new lang_string('httpsurl', 'filter_mathjaxloader'),
new lang_string('httpsurl_help', 'filter_mathjaxloader'),
'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js',
'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js',
PARAM_RAW);
$settings->add($item);

View File

@ -0,0 +1,72 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle 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.
//
// Moodle 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 Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Provides the {@link filter_mathjaxloader_filter_testcase} class.
*
* @package filter_mathjaxloader
* @category test
* @copyright 2017 David Mudrák <david@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
global $CFG;
require_once($CFG->dirroot.'/filter/mathjaxloader/filter.php');
/**
* Unit tests for the MathJax loader filter.
*
* @copyright 2017 David Mudrak <david@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class filter_mathjaxloader_filter_testcase extends advanced_testcase {
/**
* Test the functionality of {@link filter_mathjaxloader::map_language_code()}.
*
* @param string $moodlelangcode the user's current language
* @param string $mathjaxlangcode the mathjax language to be used for the moodle language
*
* @dataProvider test_map_language_code_expected_mappings
*/
public function test_map_language_code($moodlelangcode, $mathjaxlangcode) {
$filter = new filter_mathjaxloader(context_system::instance(), []);
$this->assertEquals($mathjaxlangcode, $filter->map_language_code($moodlelangcode));
}
/**
* Data provider for {@link self::test_map_language_code}
*
* @return array of [moodlelangcode, mathjaxcode] tuples
*/
public function test_map_language_code_expected_mappings() {
return [
['cz', 'cs'], // Explicit mapping.
['cs', 'cs'], // Implicit mapping (exact match).
['ca_valencia', 'ca'], // Implicit mapping of a Moodle language variant.
['pt_br', 'pt-br'], // Explicit mapping.
['en_kids', 'en'], // Implicit mapping of English variant.
['de_kids', 'de'], // Implicit mapping of non-English variant.
['es_mx_kids', 'es'], // More than one underscore in the name.
['zh_tw', 'zh-hant'], // Explicit mapping of the Taiwain Chinese in the traditional script.
['zh_cn', 'zh-hans'], // Explicit mapping of the Simplified Chinese script.
];
}
}

View File

@ -24,6 +24,6 @@
defined('MOODLE_INTERNAL') || die();
$plugin->version = 2017091900;
$plugin->version = 2017100900;
$plugin->requires = 2017050500; // Requires this Moodle version.
$plugin->component= 'filter_mathjaxloader';