mirror of
https://github.com/moodle/moodle.git
synced 2025-01-19 14:27:22 +01:00
MDL-56673 tool_templatelibrary: Don't show templates from other themes
This commit is contained in:
parent
da31fc5bff
commit
a11c74d186
@ -1 +1 @@
|
||||
define(["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){var c="@template "+b,d=0,e=[];if(e=a.match(/{{!([\s\S]*?)}}/g),null!==e)for(d=0;d<e.length;d++){var f=e[d],g=f.indexOf(c);if(g!==-1){var h=g+c.length+1;return f=f.substr(h,f.length-2-h)}}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);j===!1&&(j=h(i,b)),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(n){c.debug("Could not parse json example context for template."),c.debug(n)}}l?e.render(b,l).done(function(b,c){e.replaceNodeContents(a('[data-region="displaytemplateexample"]'),b,c)}).fail(d.exception):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}},{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)};return a('[data-region="list-templates"]').on("click","[data-templatename]",function(b){var c=a(this).data("templatename");b.preventDefault(),j(c)}),{}});
|
||||
define(["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=[];if(e=a.match(/{{!([\s\S]*?)}}/g),null!==e)for(d=0;d<e.length;d++){var f=e[d],g=f.indexOf(c);if(g!==-1){var h=g+c.length+1;return f=f.substr(h,f.length-2-h)}}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);j===!1&&(j=h(i,b)),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(n){c.debug("Could not parse json example context for template."),c.debug(n)}}l?e.render(b,l).done(function(b,c){e.replaceNodeContents(a('[data-region="displaytemplateexample"]'),b,c)}).fail(d.exception):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}},{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)};return a('[data-region="list-templates"]').on("click","[data-templatename]",function(b){var c=a(this).data("templatename");b.preventDefault(),j(c)}),{}});
|
@ -1 +1 @@
|
||||
define(["jquery","core/ajax","core/log","core/notification","core/templates"],function(a,b,c,d,e){var f=function(b){e.render("tool_templatelibrary/search_results",{templates:b}).done(function(b,c){e.replaceNode(a('[data-region="searchresults"]'),b,c)}).fail(d.exception)},g=function(){var c=a('[data-field="component"]').val(),e=a('[data-field="search"]').val();b.call([{methodname:"tool_templatelibrary_list_templates",args:{component:c,search:e},done:f,fail:d.exception}],!0,!1)},h=null,i=function(a,b){null!==h&&window.clearTimeout(h),h=window.setTimeout(function(){a(),h=null},b)},j=function(){i(g,400)};return a('[data-region="list-templates"]').on("change",'[data-field="component"]',j),a('[data-region="list-templates"]').on("input",'[data-field="search"]',j),g(),{}});
|
||||
define(["jquery","core/ajax","core/log","core/notification","core/templates","core/config"],function(a,b,c,d,e,f){var g=function(b){e.render("tool_templatelibrary/search_results",{templates:b}).done(function(b,c){e.replaceNode(a('[data-region="searchresults"]'),b,c)}).fail(d.exception)},h=function(c){var e=a('[data-field="component"]').val(),f=a('[data-field="search"]').val();b.call([{methodname:"tool_templatelibrary_list_templates",args:{component:e,search:f,themename:c},done:g,fail:d.exception}],!0,!1)},i=null,j=function(a,b){null!==i&&window.clearTimeout(i),i=window.setTimeout(function(){a(),i=null},b)},k=function(){j(h.bind(this,f.theme),400)};return a('[data-region="list-templates"]').on("change",'[data-field="component"]',k),a('[data-region="list-templates"]').on("input",'[data-field="search"]',k),h(f.theme),{}});
|
@ -33,6 +33,9 @@ define(['jquery', 'core/ajax', 'core/log', 'core/notification', 'core/templates'
|
||||
*/
|
||||
var findDocsSection = function(templateSource, templateName) {
|
||||
|
||||
if (!templateSource) {
|
||||
return false;
|
||||
}
|
||||
// Find the comment section marked with @template component/template.
|
||||
var marker = "@template " + templateName,
|
||||
i = 0,
|
||||
|
@ -21,8 +21,8 @@
|
||||
* @copyright 2015 Damyon Wiese <damyon@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
define(['jquery', 'core/ajax', 'core/log', 'core/notification', 'core/templates'],
|
||||
function($, ajax, log, notification, templates) {
|
||||
define(['jquery', 'core/ajax', 'core/log', 'core/notification', 'core/templates', 'core/config'],
|
||||
function($, ajax, log, notification, templates, config) {
|
||||
|
||||
/**
|
||||
* The ajax call has returned with a new list of templates.
|
||||
@ -42,15 +42,14 @@ define(['jquery', 'core/ajax', 'core/log', 'core/notification', 'core/templates'
|
||||
*
|
||||
* @method refreshSearch
|
||||
*/
|
||||
var refreshSearch = function() {
|
||||
var refreshSearch = function(themename) {
|
||||
var componentStr = $('[data-field="component"]').val();
|
||||
var searchStr = $('[data-field="search"]').val();
|
||||
|
||||
// Trigger the search.
|
||||
|
||||
ajax.call([
|
||||
{methodname: 'tool_templatelibrary_list_templates',
|
||||
args: {component: componentStr, search: searchStr},
|
||||
args: {component: componentStr, search: searchStr, themename: themename},
|
||||
done: reloadListTemplate,
|
||||
fail: notification.exception}
|
||||
], true, false);
|
||||
@ -78,12 +77,12 @@ define(['jquery', 'core/ajax', 'core/log', 'core/notification', 'core/templates'
|
||||
};
|
||||
|
||||
var changeHandler = function() {
|
||||
queueRefresh(refreshSearch, 400);
|
||||
queueRefresh(refreshSearch.bind(this, config.theme), 400);
|
||||
};
|
||||
// Add change handlers to refresh the list.
|
||||
$('[data-region="list-templates"]').on('change', '[data-field="component"]', changeHandler);
|
||||
$('[data-region="list-templates"]').on('input', '[data-field="search"]', changeHandler);
|
||||
|
||||
refreshSearch();
|
||||
refreshSearch(config.theme);
|
||||
return {};
|
||||
});
|
||||
|
@ -47,7 +47,12 @@ class api {
|
||||
* @return array[string] Where each template is in the form "component/templatename".
|
||||
*/
|
||||
public static function list_templates($component = '', $search = '', $themename = '') {
|
||||
global $CFG;
|
||||
global $CFG, $PAGE;
|
||||
|
||||
if (empty($themename)) {
|
||||
$themename = $PAGE->theme->name;
|
||||
}
|
||||
$themeconfig = \theme_config::load($themename);
|
||||
|
||||
$templatedirs = array();
|
||||
$results = array();
|
||||
@ -77,6 +82,9 @@ class api {
|
||||
foreach ($plugintypes as $type => $dir) {
|
||||
$plugins = core_component::get_plugin_list_with_file($type, 'templates', false);
|
||||
foreach ($plugins as $plugin => $dir) {
|
||||
if ($type == 'theme' && $plugin != $themename && !in_array($plugin, $themeconfig->parents)) {
|
||||
continue;
|
||||
}
|
||||
if (!empty($dir) && is_dir($dir)) {
|
||||
$pluginname = $type . '_' . $plugin;
|
||||
$dirs = mustache_template_finder::get_template_directories_for_component($pluginname, $themename);
|
||||
|
@ -59,7 +59,13 @@ class external extends external_api {
|
||||
VALUE_DEFAULT,
|
||||
''
|
||||
);
|
||||
$params = array('component' => $component, 'search' => $search);
|
||||
$themename = new external_value(
|
||||
PARAM_COMPONENT,
|
||||
'The current theme',
|
||||
VALUE_DEFAULT,
|
||||
''
|
||||
);
|
||||
$params = array('component' => $component, 'search' => $search, 'themename' => $themename);
|
||||
return new external_function_parameters($params);
|
||||
}
|
||||
|
||||
@ -69,14 +75,15 @@ class external extends external_api {
|
||||
* @param string $search The search string.
|
||||
* @return array[string]
|
||||
*/
|
||||
public static function list_templates($component, $search) {
|
||||
public static function list_templates($component, $search, $themename) {
|
||||
$params = self::validate_parameters(self::list_templates_parameters(),
|
||||
array(
|
||||
'component' => $component,
|
||||
'search' => $search,
|
||||
'themename' => $themename,
|
||||
));
|
||||
|
||||
return api::list_templates($component, $search);
|
||||
return api::list_templates($component, $search, $themename);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user