mirror of
https://github.com/moodle/moodle.git
synced 2025-08-06 17:36:38 +02:00
MDL-50346 core: Allow sub-directories in template names
This commit is contained in:
parent
414eca8923
commit
0261d1effa
15 changed files with 209 additions and 64 deletions
|
@ -1,2 +1,2 @@
|
|||
define ("tool_templatelibrary/display",["jquery","core/ajax","core/log","core/notification","core/templates","core/config","core/str"],function(a,b,c,d,e,f,g){var h=function(a,b){if(!a){return!1}var c="@template "+b,d=0,e=[];e=a.match(/{{!([\s\S]*?)}}/g);if(null!==e){for(d=0;d<e.length;d++){var f=e[d],g=f.indexOf(c);if(-1!==g){var h=g+c.length+1;f=f.substr(h,f.length-2-h);return f}}}return!1},i=function(b,f,i){g.get_string("templateselected","tool_templatelibrary",b).done(function(b){a("[data-region=\"displaytemplateheader\"]").text(b)}).fail(d.exception);var j=h(f,b);if(!1===j){j=h(i,b)}if(j){f=j}a("[data-region=\"displaytemplatesource\"]").text(f);var k=f.match(/Example context \(json\):([\s\S]*)/),l=!1;if(k){var m=k[1].trim();try{l=a.parseJSON(m)}catch(a){c.debug("Could not parse json example context for template.");c.debug(a)}}if(l){e.render(b,l).done(function(b,c){e.replaceNodeContents(a("[data-region=\"displaytemplateexample\"]"),b,c)}).fail(d.exception)}else{g.get_string("templatehasnoexample","tool_templatelibrary").done(function(b){a("[data-region=\"displaytemplateexample\"]").text(b)}).fail(d.exception)}},j=function(c){var e=c.split("/"),g=e.shift(),h=e.shift(),j=b.call([{methodname:"core_output_load_template",args:{component:g,template:h,themename:f.theme,includecomments:!0}},{methodname:"tool_templatelibrary_load_canonical_template",args:{component:g,template:h}}],!0,!1);a.when.apply(a,j).done(function(a,b){i(c,a,b)}).fail(d.exception)};a("[data-region=\"list-templates\"]").on("click","[data-templatename]",function(b){var c=a(this).data("templatename");b.preventDefault();j(c)});return{}});
|
||||
define ("tool_templatelibrary/display",["jquery","core/ajax","core/log","core/notification","core/templates","core/config","core/str"],function(a,b,c,d,e,f,g){var h=function(a,b){if(!a){return!1}var c="@template "+b,d=0,e=[];e=a.match(/{{!([\s\S]*?)}}/g);if(null!==e){for(d=0;d<e.length;d++){var f=e[d],g=f.indexOf(c);if(-1!==g){var h=g+c.length+1;f=f.substr(h,f.length-2-h);return f}}}return!1},i=function(b,f,i){g.get_string("templateselected","tool_templatelibrary",b).done(function(b){a("[data-region=\"displaytemplateheader\"]").text(b)}).fail(d.exception);var j=h(f,b);if(!1===j){j=h(i,b)}if(j){f=j}a("[data-region=\"displaytemplatesource\"]").text(f);var k=f.match(/Example context \(json\):([\s\S]*)/),l=!1;if(k){var m=k[1].trim();try{l=a.parseJSON(m)}catch(a){c.debug("Could not parse json example context for template.");c.debug(a)}}if(l){e.render(b,l).done(function(b,c){e.replaceNodeContents(a("[data-region=\"displaytemplateexample\"]"),b,c)}).fail(d.exception)}else{g.get_string("templatehasnoexample","tool_templatelibrary").done(function(b){a("[data-region=\"displaytemplateexample\"]").text(b)}).fail(d.exception)}},j=function(c){var e=c.split("/"),g=e.shift(),h=e.join("/"),j=b.call([{methodname:"core_output_load_template",args:{component:g,template:h,themename:f.theme,includecomments:!0}},{methodname:"tool_templatelibrary_load_canonical_template",args:{component:g,template:h}}],!0,!1);a.when.apply(a,j).done(function(a,b){i(c,a,b)}).fail(d.exception)};a("[data-region=\"list-templates\"]").on("click","[data-templatename]",function(b){var c=a(this).data("templatename");b.preventDefault();j(c)});return{}});
|
||||
//# sourceMappingURL=display.min.js.map
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -119,7 +119,7 @@ define(['jquery', 'core/ajax', 'core/log', 'core/notification', 'core/templates'
|
|||
var loadTemplate = function(templateName) {
|
||||
var parts = templateName.split('/');
|
||||
var component = parts.shift();
|
||||
var name = parts.shift();
|
||||
var name = parts.join('/');
|
||||
|
||||
var promises = ajax.call([{
|
||||
methodname: 'core_output_load_template',
|
||||
|
|
|
@ -99,13 +99,34 @@ class api {
|
|||
|
||||
foreach ($templatedirs as $templatecomponent => $dirs) {
|
||||
foreach ($dirs as $dir) {
|
||||
if (!is_dir($dir) || !is_readable($dir)) {
|
||||
continue;
|
||||
}
|
||||
$dir = realpath($dir);
|
||||
|
||||
// List it.
|
||||
$files = glob($dir . '/*.mustache');
|
||||
$directory = new \RecursiveDirectoryIterator($dir);
|
||||
$files = new \RecursiveIteratorIterator($directory);
|
||||
|
||||
foreach ($files as $file) {
|
||||
$templatename = basename($file, '.mustache');
|
||||
if ($search == '' || strpos($templatename, $search) !== false) {
|
||||
$results[$templatecomponent . '/' . $templatename] = 1;
|
||||
if (!$file->isFile()) {
|
||||
continue;
|
||||
}
|
||||
$filename = substr($file->getRealpath(), strlen($dir) + 1);
|
||||
if (strpos($templatecomponent, 'theme_') === 0) {
|
||||
if (strpos($filename, '/') !== false && strpos($filename, 'local/') !== 0) {
|
||||
// Skip any template in a sub-directory of a theme which is not in a local directory.
|
||||
// These are theme overrides of core templates.
|
||||
// Note: There is a rare edge case where a theme may override a template and then have additional
|
||||
// dependant templates and these will not be shown.
|
||||
continue;
|
||||
}
|
||||
}
|
||||
$templatename = str_replace('.mustache', '', $filename);
|
||||
$componenttemplatename = "{$templatecomponent}/{$templatename}";
|
||||
|
||||
if ($search == '' || strpos($componenttemplatename, $search) !== false) {
|
||||
$results[$componenttemplatename] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -152,5 +173,4 @@ class api {
|
|||
return $templatestr;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -105,7 +105,7 @@ class external extends external_api {
|
|||
public static function load_canonical_template_parameters() {
|
||||
return new external_function_parameters(
|
||||
array('component' => new external_value(PARAM_COMPONENT, 'component containing the template'),
|
||||
'template' => new external_value(PARAM_ALPHANUMEXT, 'name of the template'))
|
||||
'template' => new external_value(PARAM_SAFEPATH, 'name of the template'))
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -21,6 +21,6 @@
|
|||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
$plugin->version = 2019052000; // The current plugin version (Date: YYYYMMDDXX).
|
||||
$plugin->version = 2019052002; // The current plugin version (Date: YYYYMMDDXX).
|
||||
$plugin->requires = 2019051100; // Requires this Moodle version.
|
||||
$plugin->component = 'tool_templatelibrary'; // Full name of the plugin (used for diagnostics).
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue