Browse Source

Incorporando alterações do Boost 2019052000

MOODLE_37_STABLE
Matheus Garcia 6 years ago
parent
commit
e2aaeb114a
  1. 2
      amd/build/drawer.min.js
  2. 2
      amd/build/loader.min.js
  3. 1
      amd/build/pending.min.js
  4. 120
      amd/src/pending.js
  5. 50
      classes/output/block_settings_renderer.php
  6. 140
      classes/output/core/files_renderer.php
  7. 749
      classes/output/core_course/management/renderer.php
  8. 58
      classes/output/core_question/bank_renderer.php
  9. 653
      classes/output/core_renderer.php
  10. 197
      classes/output/core_renderer_maintenance.php
  11. 44
      classes/output/gradereport_history_renderer.php
  12. 12
      scss/bootstrap/utilities/_position.scss
  13. 18
      templates/block_search_forums/search_form.mustache
  14. 7
      templates/block_settings/search_form.mustache
  15. 55
      templates/core/action_menu.mustache
  16. 31
      templates/core/action_menu_item.mustache
  17. 34
      templates/core/action_menu_link.mustache
  18. 120
      templates/core/action_menu_trigger.mustache
  19. 58
      templates/core/auth_digital_minor_page.mustache
  20. 64
      templates/core/auth_verify_age_location_page.mustache
  21. 61
      templates/core/availability_info.mustache
  22. 63
      templates/core/block.mustache
  23. 80
      templates/core/chooser.mustache
  24. 48
      templates/core/columns-1to1to1.mustache
  25. 45
      templates/core/columns-1to2.mustache
  26. 44
      templates/core/columns-2to1.mustache
  27. 24
      templates/core/custom_menu_item.mustache
  28. 55
      templates/core/dataformat_selector.mustache
  29. 5
      templates/core/filemanager_confirmdialog.mustache
  30. 4
      templates/core/filemanager_default_searchform.mustache
  31. 65
      templates/core/filemanager_fileselect.mustache
  32. 43
      templates/core/filemanager_loginform.mustache
  33. 63
      templates/core/filemanager_modal_generallayout.mustache
  34. 58
      templates/core/filemanager_page_generallayout.mustache
  35. 8
      templates/core/filemanager_processexistingfile.mustache
  36. 9
      templates/core/filemanager_processexistingfilemultiple.mustache
  37. 66
      templates/core/filemanager_selectlayout.mustache
  38. 29
      templates/core/filemanager_uploadform.mustache
  39. 53
      templates/core/form_autocomplete_input.mustache
  40. 50
      templates/core/form_autocomplete_selection.mustache
  41. 25
      templates/core/help_icon.mustache
  42. 106
      templates/core/initials_bar.mustache
  43. 244
      templates/core/loginform.mustache
  44. 67
      templates/core/modal.mustache
  45. 36
      templates/core/modal_backdrop.mustache
  46. 79
      templates/core/navbar.mustache
  47. 44
      templates/core/notification_error.mustache
  48. 45
      templates/core/notification_info.mustache
  49. 44
      templates/core/notification_success.mustache
  50. 44
      templates/core/notification_warning.mustache
  51. 17
      templates/core/preferences_groups.mustache
  52. 64
      templates/core/progress_bar.mustache
  53. 38
      templates/core/select_time.mustache
  54. 147
      templates/core/settings_link_page.mustache
  55. 46
      templates/core/settings_link_page_single.mustache
  56. 33
      templates/core/signup_form_layout.mustache
  57. 61
      templates/core/single_button.mustache
  58. 16
      templates/core/skip_links.mustache
  59. 44
      templates/core/tabtree.mustache
  60. 43
      templates/core_admin/setting.mustache
  61. 30
      templates/core_admin/setting_configcolourpicker.mustache
  62. 31
      templates/core_admin/setting_configduration.mustache
  63. 33
      templates/core_admin/setting_configfile.mustache
  64. 28
      templates/core_admin/setting_configmultiselect.mustache
  65. 35
      templates/core_admin/setting_configmultiselect_optgroup.mustache
  66. 27
      templates/core_admin/setting_configselect.mustache
  67. 35
      templates/core_admin/setting_configselect_optgroup.mustache
  68. 22
      templates/core_admin/setting_configtext.mustache
  69. 22
      templates/core_admin/setting_configtextarea.mustache
  70. 36
      templates/core_admin/setting_configtime.mustache
  71. 29
      templates/core_admin/setting_courselist_frontpage.mustache
  72. 46
      templates/core_admin/setting_description.mustache
  73. 39
      templates/core_admin/setting_devicedetectregex.mustache
  74. 51
      templates/core_admin/setting_emoticons.mustache
  75. 31
      templates/core_admin/setting_gradecat_combo.mustache
  76. 40
      templates/core_admin/settings.mustache
  77. 72
      templates/core_admin/settings_search_results.mustache
  78. 64
      templates/core_calendar/minicalendar_day_link.mustache
  79. 47
      templates/core_form/editor_textarea.mustache
  80. 39
      templates/core_form/element-advcheckbox-inline.mustache
  81. 57
      templates/core_form/element-advcheckbox.mustache
  82. 40
      templates/core_form/element-autocomplete-inline.mustache
  83. 40
      templates/core_form/element-autocomplete.mustache
  84. 18
      templates/core_form/element-button-inline.mustache
  85. 17
      templates/core_form/element-button.mustache
  86. 39
      templates/core_form/element-checkbox-inline.mustache
  87. 57
      templates/core_form/element-checkbox.mustache
  88. 10
      templates/core_form/element-date_selector-inline.mustache
  89. 10
      templates/core_form/element-date_selector.mustache
  90. 10
      templates/core_form/element-date_time_selector-inline.mustache
  91. 10
      templates/core_form/element-date_time_selector.mustache
  92. 43
      templates/core_form/element-defaultcustom-inline.mustache
  93. 43
      templates/core_form/element-defaultcustom.mustache
  94. 10
      templates/core_form/element-duration-inline.mustache
  95. 1
      templates/core_form/element-duration.mustache
  96. 5
      templates/core_form/element-editor.mustache
  97. 5
      templates/core_form/element-filemanager.mustache
  98. 5
      templates/core_form/element-filepicker.mustache
  99. 1
      templates/core_form/element-filetypes.mustache
  100. 1
      templates/core_form/element-float-inline.mustache

2
amd/build/drawer.min.js

@ -1 +1 @@
define(["jquery","core/custom_interaction_events","core/log"],function(a,b,c){var d={TOGGLE_REGION:'[data-region="drawer-toggle"]',TOGGLE_ACTION:'[data-action="toggle-drawer"]',TOGGLE_TARGET:"aria-controls",TOGGLE_SIDE:"left",BODY:"body",SECTION:'.list-group-item[href*="#section-"]'},e=a(document).width()<768,f=function(){a(d.TOGGLE_REGION).length||c.debug("Page is missing a drawer region"),a(d.TOGGLE_ACTION).length||c.debug("Page is missing a drawer toggle link"),a(d.TOGGLE_REGION).each(function(b,c){var f=a(c).find(d.TOGGLE_ACTION),g=f.attr("aria-controls"),h=a(document.getElementById(g)),i="false"==f.attr("aria-expanded"),j=f.attr("data-side"),k=a(d.BODY),l=f.attr("data-preference");e&&M.util.set_user_preference(l,"false"),h.on("mousewheel DOMMouseScroll",this.preventPageScroll),i?f.attr("aria-expanded","false"):(k.addClass("drawer-open-"+j),f.attr("aria-expanded","true"))}.bind(this)),this.registerEventListeners(),e&&this.closeAll()};return f.prototype.closeAll=function(){a(d.TOGGLE_REGION).each(function(b,c){var f=a(c).find(d.TOGGLE_ACTION),g=f.attr("data-side"),h=a(d.BODY),i=f.attr("aria-controls"),j=a(document.getElementById(i)),k=f.attr("data-preference");f.attr("aria-expanded","false"),h.removeClass("drawer-open-"+g),j.attr("aria-hidden","true"),j.addClass("closed"),e||M.util.set_user_preference(k,"false")})},f.prototype.toggleDrawer=function(b){var c=a(b.target).closest("[data-action=toggle-drawer]"),f=c.attr("aria-controls"),g=a(document.getElementById(f)),h=a(d.BODY),i=c.attr("data-side"),j=c.attr("data-preference");e&&M.util.set_user_preference(j,"false"),h.addClass("drawer-ease");var k="true"==c.attr("aria-expanded");k?(h.removeClass("drawer-open-"+i),c.attr("aria-expanded","false"),g.attr("aria-hidden","true"),g.addClass("closed"),e||M.util.set_user_preference(j,"false")):(c.attr("aria-expanded","true"),g.attr("aria-hidden","false"),g.focus(),h.addClass("drawer-open-"+i),g.removeClass("closed"),e||M.util.set_user_preference(j,"true"))},f.prototype.preventPageScroll=function(b){var c=b.wheelDelta||b.originalEvent&&b.originalEvent.wheelDelta||-b.originalEvent.detail,d=this.scrollTop+a(this).outerHeight()-this.scrollHeight>=0,e=this.scrollTop<=0;(c<0&&d||c>0&&e)&&b.preventDefault()},f.prototype.registerEventListeners=function(){a(d.TOGGLE_ACTION).each(function(c,d){b.define(a(d),[b.events.activate]),a(d).on(b.events.activate,function(a,b){this.toggleDrawer(b.originalEvent),b.originalEvent.preventDefault()}.bind(this))}.bind(this)),a(d.SECTION).click(function(){e&&this.closeAll()}.bind(this))},{init:function(){return new f}}});
define(["jquery","core/custom_interaction_events","core/log","core/pubsub"],function(a,b,c,d){var e={TOGGLE_REGION:'[data-region="drawer-toggle"]',TOGGLE_ACTION:'[data-action="toggle-drawer"]',TOGGLE_TARGET:"aria-controls",TOGGLE_SIDE:"left",BODY:"body",SECTION:'.list-group-item[href*="#section-"]',DRAWER:"#nav-drawer"},f=a(document).width()<768,g=function(){a(e.TOGGLE_REGION).length||c.debug("Page is missing a drawer region"),a(e.TOGGLE_ACTION).length||c.debug("Page is missing a drawer toggle link"),a(e.TOGGLE_REGION).each(function(b,c){var d=a(c).find(e.TOGGLE_ACTION),g=d.attr("aria-controls"),h=a(document.getElementById(g)),i="false"==d.attr("aria-expanded"),j=d.attr("data-side"),k=a(e.BODY),l=d.attr("data-preference");f&&M.util.set_user_preference(l,"false"),h.on("mousewheel DOMMouseScroll",this.preventPageScroll),i?d.attr("aria-expanded","false"):(k.addClass("drawer-open-"+j),d.attr("aria-expanded","true"))}.bind(this)),this.registerEventListeners(),f&&this.closeAll()};return g.prototype.closeAll=function(){a(e.TOGGLE_REGION).each(function(b,c){var d=a(c).find(e.TOGGLE_ACTION),g=d.attr("data-side"),h=a(e.BODY),i=d.attr("aria-controls"),j=a(document.getElementById(i)),k=d.attr("data-preference");d.attr("aria-expanded","false"),h.removeClass("drawer-open-"+g),j.attr("aria-hidden","true"),j.addClass("closed"),f||M.util.set_user_preference(k,"false")})},g.prototype.toggleDrawer=function(b){var c=a(b.target).closest("[data-action=toggle-drawer]"),g=c.attr("aria-controls"),h=a(document.getElementById(g)),i=a(e.BODY),j=c.attr("data-side"),k=c.attr("data-preference");f&&M.util.set_user_preference(k,"false"),i.addClass("drawer-ease");var l="true"==c.attr("aria-expanded");l?(i.removeClass("drawer-open-"+j),c.attr("aria-expanded","false"),h.attr("aria-hidden","true"),h.addClass("closed"),f||M.util.set_user_preference(k,"false")):(c.attr("aria-expanded","true"),h.attr("aria-hidden","false"),h.focus(),i.addClass("drawer-open-"+j),h.removeClass("closed"),f||M.util.set_user_preference(k,"true")),d.publish("nav-drawer-toggle-start",l)},g.prototype.preventPageScroll=function(b){var c=b.wheelDelta||b.originalEvent&&b.originalEvent.wheelDelta||-b.originalEvent.detail,d=this.scrollTop+a(this).outerHeight()-this.scrollHeight>=0,e=this.scrollTop<=0;(c<0&&d||c>0&&e)&&b.preventDefault()},g.prototype.registerEventListeners=function(){a(e.TOGGLE_ACTION).each(function(c,d){b.define(a(d),[b.events.activate]),a(d).on(b.events.activate,function(a,b){this.toggleDrawer(b.originalEvent),b.originalEvent.preventDefault()}.bind(this))}.bind(this)),a(e.SECTION).click(function(){f&&this.closeAll()}.bind(this)),a(e.DRAWER).on("webkitTransitionEnd msTransitionEnd transitionend",function(b){var c=a(b.target).closest(e.DRAWER),f="false"==c.attr("aria-hidden");d.publish("nav-drawer-toggle-end",f)})},{init:function(){return new g}}});

2
amd/build/loader.min.js

@ -1 +1 @@
define(["jquery","./tether","core/event"],function(a,b,c){return window.jQuery=a,window.Tether=b,require(["theme_ilb/aria","theme_ilb/util","theme_ilb/alert","theme_ilb/button","theme_ilb/carousel","theme_ilb/collapse","theme_ilb/dropdown","theme_ilb/modal","theme_ilb/scrollspy","theme_ilb/tab","theme_ilb/tooltip","theme_ilb/popover"],function(b){a("body").popover({trigger:"focus",selector:"[data-toggle=popover][data-trigger!=hover]"}),a("html").popover({container:"body",selector:"[data-toggle=popover][data-trigger=hover]",trigger:"hover",delay:{hide:500}}),c.getLegacyEvents().done(function(b){a(document).on(b.FILTER_CONTENT_UPDATED,function(){a("body").popover({selector:'[data-toggle="popover"]',trigger:"focus"})})}),b.init()}),{}});
define(["jquery","./tether","core/event"],function(a,b,c){return window.jQuery=a,window.Tether=b,require(["theme_ilb/aria","theme_ilb/pending","theme_ilb/util","theme_ilb/alert","theme_ilb/button","theme_ilb/carousel","theme_ilb/collapse","theme_ilb/dropdown","theme_ilb/modal","theme_ilb/scrollspy","theme_ilb/tab","theme_ilb/tooltip","theme_ilb/popover"],function(b){a("body").popover({trigger:"focus",selector:"[data-toggle=popover][data-trigger!=hover]"}),a("html").popover({container:"body",selector:"[data-toggle=popover][data-trigger=hover]",trigger:"hover",delay:{hide:500}}),c.getLegacyEvents().done(function(b){a(document).on(b.FILTER_CONTENT_UPDATED,function(){a("body").popover({selector:'[data-toggle="popover"]',trigger:"focus"})})}),b.init()}),{}});

1
amd/build/pending.min.js

@ -0,0 +1 @@
define(["jquery"],function(a){var b={alert:[{start:"close",end:"closed"}],carousel:[{start:"slide",end:"slid"}],collapse:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}],dropdown:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}],modal:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}],popover:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}],tab:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}],tooltip:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}]};Object.keys(b).forEach(function(c){b[c].forEach(function(b){var d=b.start+".bs."+c,e=b.end+".bs."+c;a(document.body).on(d,function(){M.util.js_pending(e)}),a(document.body).on(e,function(){M.util.js_complete(e)})})})});

120
amd/src/pending.js

@ -0,0 +1,120 @@
// 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/>.
/**
* Add Pending JS checks to stock Bootstrap transitions.
*
* @module theme_boost/pending
* @copyright 2019 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define(['jquery'], function($) {
var moduleTransitions = {
alert: [
// Alert.
{
start: 'close',
end: 'closed',
},
],
carousel: [
{
start: 'slide',
end: 'slid',
},
],
collapse: [
{
start: 'hide',
end: 'hidden',
},
{
start: 'show',
end: 'shown',
},
],
dropdown: [
{
start: 'hide',
end: 'hidden',
},
{
start: 'show',
end: 'shown',
},
],
modal: [
{
start: 'hide',
end: 'hidden',
},
{
start: 'show',
end: 'shown',
},
],
popover: [
{
start: 'hide',
end: 'hidden',
},
{
start: 'show',
end: 'shown',
},
],
tab: [
{
start: 'hide',
end: 'hidden',
},
{
start: 'show',
end: 'shown',
},
],
tooltip: [
{
start: 'hide',
end: 'hidden',
},
{
start: 'show',
end: 'shown',
},
],
};
Object.keys(moduleTransitions).forEach(function(key) {
moduleTransitions[key].forEach(function(pair) {
var eventStart = pair.start + '.bs.' + key;
var eventEnd = pair.end + '.bs.' + key;
$(document.body).on(eventStart, function() {
M.util.js_pending(eventEnd);
});
$(document.body).on(eventEnd, function() {
M.util.js_complete(eventEnd);
});
});
});
});

50
classes/output/block_settings_renderer.php

@ -1,50 +0,0 @@
<?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/>.
/**
* Overriden block settings renderer.
*
* @package theme_ilb
* @copyright 2016 Frédéric Massart - FMCorz.net
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace theme_ilb\output;
defined('MOODLE_INTERNAL') || die();
require_once($CFG->dirroot . '/blocks/settings/renderer.php');
use moodle_url;
/**
* Overriden block settings renderer.
*
* @package theme_ilb
* @copyright 2016 Frédéric Massart - FMCorz.net
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class block_settings_renderer extends \block_settings_renderer {
public function search_form(moodle_url $formtarget, $searchvalue) {
$data = [
'action' => $formtarget->out(false),
'label' => get_string('searchinsettings', 'admin'),
'searchvalue' => $searchvalue
];
return $this->render_from_template('block_settings/search_form', $data);
}
}

140
classes/output/core/files_renderer.php

@ -1,140 +0,0 @@
<?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/>.
namespace theme_ilb\output\core;
use plugin_renderer_base;
defined('MOODLE_INTERNAL') || die();
require_once($CFG->dirroot . '/files/renderer.php');
/**
* Rendering of files viewer related widgets.
* @package theme_ilb
* @copyright 2016 Damyon Wiese
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/**
* Rendering of files viewer related widgets.
* @package theme_ilb
* @copyright 2016 Damyon Wiese
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class files_renderer extends \core_files_renderer {
/**
* FileManager JS template for window with file information/actions.
*
*/
protected function fm_js_template_fileselectlayout() {
$context = [
'helpicon' => $this->help_icon('setmainfile', 'repository')
];
return $this->render_from_template('core/filemanager_fileselect', $context);
}
/**
* FileManager JS template for popup confirm dialogue window.
*
* @return string
*/
protected function fm_js_template_confirmdialog() {
return $this->render_from_template('core/filemanager_confirmdialog', []);
}
/**
* Template for FilePicker with general layout (not QuickUpload).
*
*
* @return string
*/
protected function fp_js_template_generallayout() {
return $this->render_from_template('core/filemanager_modal_generallayout', []);
}
/**
* Returns html for displaying one file manager
*
* @param form_filemanager $fm
* @return string
*/
protected function fm_print_generallayout($fm) {
$context = [
'client_id' => $fm->options->client_id,
'helpicon' => $this->help_icon('setmainfile', 'repository'),
'restrictions' => $this->fm_print_restrictions($fm)
];
return $this->render_from_template('core/filemanager_page_generallayout', $context);
}
/**
* Returns HTML for default repository searchform to be passed to Filepicker
*
* This will be used as contents for search form defined in generallayout template
* (form with id {TOOLSEARCHID}).
* Default contents is one text input field with name="s"
*/
public function repository_default_searchform() {
return $this->render_from_template('core/filemanager_default_searchform', []);
}
/**
* FilePicker JS template for 'Upload file' repository
*
* @return string
*/
protected function fp_js_template_uploadform() {
return $this->render_from_template('core/filemanager_uploadform', []);
}
/**
* FilePicker JS template for repository login form including templates for each element type
*
* @return string
*/
protected function fp_js_template_loginform() {
return $this->render_from_template('core/filemanager_loginform', []);
}
/**
* FilePicker JS template for window appearing to select a file.
*
* @return string
*/
protected function fp_js_template_selectlayout() {
return $this->render_from_template('core/filemanager_selectlayout', []);
}
/**
* FilePicker JS template for popup dialogue window asking for action when file with the same name already exists
* (multiple-file version).
*
* @return string
*/
protected function fp_js_template_processexistingfilemultiple() {
return $this->render_from_template('core/filemanager_processexistingfilemultiple', []);
}
/**
* FilePicker JS template for popup dialogue window asking for action when file with the same name already exists.
*
* @return string
*/
protected function fp_js_template_processexistingfile() {
return $this->render_from_template('core/filemanager_processexistingfile', []);
}
}

749
classes/output/core_course/management/renderer.php

@ -1,749 +0,0 @@
<?php
// This file is part of The Bootstrap Moodle theme
//
// 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/>.
/**
* Renderers to align Moodle's HTML with that expected by Bootstrap
*
* @package theme_ilb
* @copyright 2018 Bas Brands
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace theme_ilb\output\core_course\management;
defined('MOODLE_INTERNAL') || die();
require_once($CFG->dirroot . "/course/classes/management_renderer.php");
use html_writer;
use core_course_category;
use moodle_url;
use core_course_list_element;
use lang_string;
use context_system;
use stdClass;
use action_menu;
use action_menu_link_secondary;
/**
* Main renderer for the course management pages.
*
* @package theme_ilb
* @copyright 2013 Sam Hemelryk
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class renderer extends \core_course_management_renderer {
/**
* Opens a grid.
*
* Call {@link core_course_management_renderer::grid_column_start()} to create columns.
*
* @param string $id An id to give this grid.
* @param string $class A class to give this grid.
* @return string
*/
public function grid_start($id = null, $class = null) {
$gridclass = 'grid-start grid-row-r d-flex flex-wrap row';
if (is_null($class)) {
$class = $gridclass;
} else {
$class .= ' ' . $gridclass;
}
$attributes = array();
if (!is_null($id)) {
$attributes['id'] = $id;
}
return html_writer::start_div($class, $attributes);
}
/**
* Opens a grid column
*
* @param int $size The number of segments this column should span.
* @param string $id An id to give the column.
* @param string $class A class to give the column.
* @return string
*/
public function grid_column_start($size, $id = null, $class = null) {
if ($id == 'course-detail') {
$size = 12;
$bootstrapclass = 'col-md-'.$size;
} else {
$bootstrapclass = 'd-flex flex-wrap px-3 mb-3';
}
$yuigridclass = "col-sm";
if (is_null($class)) {
$class = $yuigridclass . ' ' . $bootstrapclass;
} else {
$class .= ' ' . $yuigridclass . ' ' . $bootstrapclass;
}
$attributes = array();
if (!is_null($id)) {
$attributes['id'] = $id;
}
return html_writer::start_div($class . " grid_column_start", $attributes);
}
/**
* Renderers detailed course information.
*
* @param core_course_list_element $course The course to display details for.
* @return string
*/
public function course_detail(core_course_list_element $course) {
$details = \core_course\management\helper::get_course_detail_array($course);
$fullname = $details['fullname']['value'];
$html = html_writer::start_div('course-detail card');
$html .= html_writer::start_div('card-header');
$html .= html_writer::tag('h3', $fullname, array('id' => 'course-detail-title',
'class' => 'card-title', 'tabindex' => '0'));
$html .= html_writer::end_div();
$html .= html_writer::start_div('card-body');
$html .= $this->course_detail_actions($course);
foreach ($details as $class => $data) {
$html .= $this->detail_pair($data['key'], $data['value'], $class);
}
$html .= html_writer::end_div();
$html .= html_writer::end_div();
return $html;
}
/**
* Renders html to display a course search form
*
* @param string $value default value to populate the search field
* @param string $format display format - 'plain' (default), 'short' or 'navbar'
* @return string
*/
public function course_search_form($value = '', $format = 'plain') {
static $count = 0;
$formid = 'coursesearch';
if ((++$count) > 1) {
$formid .= $count;
}
switch ($format) {
case 'navbar' :
$formid = 'coursesearchnavbar';
$inputid = 'navsearchbox';
$inputsize = 20;
break;
case 'short' :
$inputid = 'shortsearchbox';
$inputsize = 12;
break;
default :
$inputid = 'coursesearchbox';
$inputsize = 30;
}
$strsearchcourses = get_string("searchcourses");
$searchurl = new moodle_url('/course/management.php');
$output = html_writer::start_div('row');
$output .= html_writer::start_div('col-md-12');
$output .= html_writer::start_tag('form', array('class' => 'card', 'id' => $formid,
'action' => $searchurl, 'method' => 'get'));
$output .= html_writer::start_tag('fieldset', array('class' => 'coursesearchbox invisiblefieldset'));
$output .= html_writer::tag('div', $this->output->heading($strsearchcourses.': ', 2, 'm-0'),
array('class' => 'card-header'));
$output .= html_writer::start_div('card-body');
$output .= html_writer::start_div('input-group col-sm-6 col-lg-4 m-auto');
$output .= html_writer::empty_tag('input', array('class' => 'form-control', 'type' => 'text', 'id' => $inputid,
'size' => $inputsize, 'name' => 'search', 'value' => s($value)));
$output .= html_writer::start_tag('span', array('class' => 'input-group-btn'));
$output .= html_writer::tag('button', get_string('go'), array('class' => 'btn btn-primary', 'type' => 'submit'));
$output .= html_writer::end_tag('span');
$output .= html_writer::end_div();
$output .= html_writer::end_div();
$output .= html_writer::end_tag('fieldset');
$output .= html_writer::end_tag('form');
$output .= html_writer::end_div();
$output .= html_writer::end_div();
return $output;
}
/**
* Presents a course category listing.
*
* @param core_course_category $category The currently selected category. Also the category to highlight in the listing.
* @return string
*/
public function category_listing(core_course_category $category = null) {
if ($category === null) {
$selectedparents = array();
$selectedcategory = null;
} else {
$selectedparents = $category->get_parents();
$selectedparents[] = $category->id;
$selectedcategory = $category->id;
}
$catatlevel = \core_course\management\helper::get_expanded_categories('');
$catatlevel[] = array_shift($selectedparents);
$catatlevel = array_unique($catatlevel);
$listing = core_course_category::get(0)->get_children();
$attributes = array(
'class' => 'ml-1 list-unstyled',
'role' => 'tree',
'aria-labelledby' => 'category-listing-title'
);
$html = html_writer::start_div('category-listing card w-100');
$html .= html_writer::tag('h3', get_string('categories'),
array('class' => 'card-header', 'id' => 'category-listing-title'));
$html .= html_writer::start_div('card-body');
$html .= $this->category_listing_actions($category);
$html .= html_writer::start_tag('ul', $attributes);
foreach ($listing as $listitem) {
// Render each category in the listing.
$subcategories = array();
if (in_array($listitem->id, $catatlevel)) {
$subcategories = $listitem->get_children();
}
$html .= $this->category_listitem(
$listitem,
$subcategories,
$listitem->get_children_count(),
$selectedcategory,
$selectedparents
);
}
$html .= html_writer::end_tag('ul');
$html .= $this->category_bulk_actions($category);
$html .= html_writer::end_div();
$html .= html_writer::end_div();
return $html;
}
/**
* Renders a category list item.
*
* This function gets called recursively to render sub categories.
*
* @param core_course_category $category The category to render as listitem.
* @param core_course_category[] $subcategories The subcategories belonging to the category being rented.
* @param int $totalsubcategories The total number of sub categories.
* @param int $selectedcategory The currently selected category
* @param int[] $selectedcategories The path to the selected category and its ID.
* @return string
*/
public function category_listitem(core_course_category $category, array $subcategories, $totalsubcategories,
$selectedcategory = null, $selectedcategories = array()) {
$isexpandable = ($totalsubcategories > 0);
$isexpanded = (!empty($subcategories));
$activecategory = ($selectedcategory === $category->id);
$attributes = array(
'class' => 'listitem listitem-category list-group-item list-group-item-action',
'data-id' => $category->id,
'data-expandable' => $isexpandable ? '1' : '0',
'data-expanded' => $isexpanded ? '1' : '0',
'data-selected' => $activecategory ? '1' : '0',
'data-visible' => $category->visible ? '1' : '0',
'role' => 'treeitem',
'aria-expanded' => $isexpanded ? 'true' : 'false'
);
$text = $category->get_formatted_name();
if ($category->parent) {
$a = new stdClass;
$a->category = $text;
$a->parentcategory = $category->get_parent_coursecat()->get_formatted_name();
$textlabel = get_string('categorysubcategoryof', 'moodle', $a);
}
$courseicon = $this->output->pix_icon('i/course', get_string('courses'));
$bcatinput = array(
'type' => 'checkbox',
'name' => 'bcat[]',
'value' => $category->id,
'class' => 'bulk-action-checkbox',
'aria-label' => get_string('bulkactionselect', 'moodle', $text),
'data-action' => 'select'
);
if (!$category->can_resort_subcategories() && !$category->has_manage_capability()) {
// Very very hardcoded here.
$bcatinput['style'] = 'visibility:hidden';
}
$viewcaturl = new moodle_url('/course/management.php', array('categoryid' => $category->id));
if ($isexpanded) {
$icon = $this->output->pix_icon('t/switch_minus', get_string('collapse'),
'moodle', array('class' => 'tree-icon', 'title' => ''));
$icon = html_writer::link(
$viewcaturl,
$icon,
array(
'class' => 'float-left',
'data-action' => 'collapse',
'title' => get_string('collapsecategory', 'moodle', $text),
'aria-controls' => 'subcategoryof'.$category->id
)
);
} else if ($isexpandable) {
$icon = $this->output->pix_icon('t/switch_plus', get_string('expand'),
'moodle', array('class' => 'tree-icon', 'title' => ''));
$icon = html_writer::link(
$viewcaturl,
$icon,
array(
'class' => 'float-left',
'data-action' => 'expand',
'title' => get_string('expandcategory', 'moodle', $text)
)
);
} else {
$icon = $this->output->pix_icon(
'i/empty',
'',
'moodle',
array('class' => 'tree-icon'));
$icon = html_writer::span($icon, 'float-left');
}
$actions = \core_course\management\helper::get_category_listitem_actions($category);
$hasactions = !empty($actions) || $category->can_create_course();
$html = html_writer::start_tag('li', $attributes);
$html .= html_writer::start_div('clearfix');
$html .= html_writer::start_div('float-left ba-checkbox');
$html .= html_writer::empty_tag('input', $bcatinput).'&nbsp;';
$html .= html_writer::end_div();
$html .= $icon;
if ($hasactions) {
$textattributes = array('class' => 'float-left categoryname');
} else {
$textattributes = array('class' => 'float-left categoryname without-actions');
}
if (isset($textlabel)) {
$textattributes['aria-label'] = $textlabel;
}
$html .= html_writer::link($viewcaturl, $text, $textattributes);
$html .= html_writer::start_div('float-right d-flex');
if ($category->idnumber) {
$html .= html_writer::tag('span', s($category->idnumber), array('class' => 'dimmed idnumber'));
}
if ($hasactions) {
$html .= $this->category_listitem_actions($category, $actions);
}
$countid = 'course-count-'.$category->id;
$html .= html_writer::span(
html_writer::span($category->get_courses_count()) .
html_writer::span(get_string('courses'), 'accesshide', array('id' => $countid)) .
$courseicon,
'course-count dimmed',
array('aria-labelledby' => $countid)
);
$html .= html_writer::end_div();
$html .= html_writer::end_div();
if ($isexpanded) {
$html .= html_writer::start_tag('ul',
array('class' => 'ml', 'role' => 'group', 'id' => 'subcategoryof'.$category->id));
$catatlevel = \core_course\management\helper::get_expanded_categories($category->path);
$catatlevel[] = array_shift($selectedcategories);
$catatlevel = array_unique($catatlevel);
foreach ($subcategories as $listitem) {
$childcategories = (in_array($listitem->id, $catatlevel)) ? $listitem->get_children() : array();
$html .= $this->category_listitem(
$listitem,
$childcategories,
$listitem->get_children_count(),
$selectedcategory,
$selectedcategories
);
}
$html .= html_writer::end_tag('ul');
}
$html .= html_writer::end_tag('li');
return $html;
}
/**
* Renderers the actions that are possible for the course category listing.
*
* These are not the actions associated with an individual category listing.
* That happens through category_listitem_actions.
*
* @param core_course_category $category
* @return string
*/
public function category_listing_actions(core_course_category $category = null) {
$actions = array();
$cancreatecategory = $category && $category->can_create_subcategory();
$cancreatecategory = $cancreatecategory || core_course_category::can_create_top_level_category();
if ($category === null) {
$category = core_course_category::get(0);
}
if ($cancreatecategory) {
$url = new moodle_url('/course/editcategory.php', array('parent' => $category->id));
$actions[] = html_writer::link($url, get_string('createnewcategory'), array('class' => 'btn btn-default'));
}
if (core_course_category::can_approve_course_requests()) {
$actions[] = html_writer::link(new moodle_url('/course/pending.php'), get_string('coursespending'));
}
if (count($actions) === 0) {
return '';
}
return html_writer::div(join(' ', $actions), 'listing-actions category-listing-actions mb-3');
}
/**
* Renders a course listing.
*
* @param core_course_category $category The currently selected category. This is what the listing is focused on.
* @param core_course_list_element $course The currently selected course.
* @param int $page The page being displayed.
* @param int $perpage The number of courses to display per page.
* @param string|null $viewmode The view mode the page is in, one out of 'default', 'combined', 'courses' or 'categories'.
* @return string
*/
public function course_listing(core_course_category $category = null, core_course_list_element $course = null,
$page = 0, $perpage = 20, $viewmode = 'default') {
if ($category === null) {
$html = html_writer::start_div('select-a-category');
$html .= html_writer::tag('h3', get_string('courses'),
array('id' => 'course-listing-title', 'tabindex' => '0'));
$html .= $this->output->notification(get_string('selectacategory'), 'notifymessage');
$html .= html_writer::end_div();
return $html;
}
$page = max($page, 0);
$perpage = max($perpage, 2);
$totalcourses = $category->coursecount;
$totalpages = ceil($totalcourses / $perpage);
if ($page > $totalpages - 1) {
$page = $totalpages - 1;
}
$options = array(
'offset' => $page * $perpage,
'limit' => $perpage
);
$courseid = isset($course) ? $course->id : null;
$class = '';
if ($page === 0) {
$class .= ' firstpage';
}
if ($page + 1 === (int)$totalpages) {
$class .= ' lastpage';
}
$html = html_writer::start_div('card course-listing w-100'.$class, array(
'data-category' => $category->id,
'data-page' => $page,
'data-totalpages' => $totalpages,
'data-totalcourses' => $totalcourses,
'data-canmoveoutof' => $category->can_move_courses_out_of() && $category->can_move_courses_into()
));
$html .= html_writer::tag('h3', $category->get_formatted_name(),
array('id' => 'course-listing-title', 'tabindex' => '0', 'class' => 'card-header'));
$html .= html_writer::start_div('card-body');
$html .= $this->course_listing_actions($category, $course, $perpage);
$html .= $this->listing_pagination($category, $page, $perpage, false, $viewmode);
$html .= html_writer::start_tag('ul', array('class' => 'ml course-list', 'role' => 'group'));
foreach ($category->get_courses($options) as $listitem) {
$html .= $this->course_listitem($category, $listitem, $courseid);
}
$html .= html_writer::end_tag('ul');
$html .= $this->listing_pagination($category, $page, $perpage, true, $viewmode);
$html .= $this->course_bulk_actions($category);
$html .= html_writer::end_div();
$html .= html_writer::end_div();
return $html;
}
/**
* Renderers a course list item.
*
* This function will be called for every course being displayed by course_listing.
*
* @param core_course_category $category The currently selected category and the category the course belongs to.
* @param core_course_list_element $course The course to produce HTML for.
* @param int $selectedcourse The id of the currently selected course.
* @return string
*/
public function course_listitem(core_course_category $category, core_course_list_element $course, $selectedcourse) {
$text = $course->get_formatted_name();
$attributes = array(
'class' => 'listitem listitem-course list-group-item list-group-item-action',
'data-id' => $course->id,
'data-selected' => ($selectedcourse == $course->id) ? '1' : '0',
'data-visible' => $course->visible ? '1' : '0'
);
$bulkcourseinput = array(
'type' => 'checkbox',
'name' => 'bc[]',
'value' => $course->id,
'class' => 'bulk-action-checkbox',
'aria-label' => get_string('bulkactionselect', 'moodle', $text),
'data-action' => 'select'
);
if (!$category->has_manage_capability()) {
// Very very hardcoded here.
$bulkcourseinput['style'] = 'visibility:hidden';
}
$viewcourseurl = new moodle_url($this->page->url, array('courseid' => $course->id));
$html = html_writer::start_tag('li', $attributes);
$html .= html_writer::start_div('clearfix');
if ($category->can_resort_courses()) {
// In order for dnd to be available the user must be able to resort the category children..
$html .= html_writer::div($this->output->pix_icon('i/move_2d', get_string('dndcourse')), 'float-left drag-handle');
}
$html .= html_writer::start_div('ba-checkbox float-left');
$html .= html_writer::empty_tag('input', $bulkcourseinput).'&nbsp;';
$html .= html_writer::end_div();
$html .= html_writer::link($viewcourseurl, $text, array('class' => 'float-left coursename'));
$html .= html_writer::start_div('float-right');
if ($course->idnumber) {
$html .= html_writer::tag('span', s($course->idnumber), array('class' => 'dimmed idnumber'));
}
$html .= $this->course_listitem_actions($category, $course);
$html .= html_writer::end_div();
$html .= html_writer::end_div();
$html .= html_writer::end_tag('li');
return $html;
}
/**
* Renderers actions for the course listing.
*
* Not to be confused with course_listitem_actions which renderers the actions for individual courses.
*
* @param core_course_category $category
* @param core_course_list_element $course The currently selected course.
* @param int $perpage
* @return string
*/
public function course_listing_actions(core_course_category $category, core_course_list_element $course = null, $perpage = 20) {
$actions = array();
if ($category->can_create_course()) {
$url = new moodle_url('/course/edit.php', array('category' => $category->id, 'returnto' => 'catmanage'));
$actions[] = html_writer::link($url, get_string('createnewcourse'), array('class' => 'btn btn-default'));
}
if ($category->can_request_course()) {
// Request a new course.
$url = new moodle_url('/course/request.php', array('return' => 'management'));
$actions[] = html_writer::link($url, get_string('requestcourse'));
}
if ($category->can_resort_courses()) {
$params = $this->page->url->params();
$params['action'] = 'resortcourses';
$params['sesskey'] = sesskey();
$baseurl = new moodle_url('/course/management.php', $params);
$fullnameurl = new moodle_url($baseurl, array('resort' => 'fullname'));
$fullnameurldesc = new moodle_url($baseurl, array('resort' => 'fullnamedesc'));
$shortnameurl = new moodle_url($baseurl, array('resort' => 'shortname'));
$shortnameurldesc = new moodle_url($baseurl, array('resort' => 'shortnamedesc'));
$idnumberurl = new moodle_url($baseurl, array('resort' => 'idnumber'));
$idnumberdescurl = new moodle_url($baseurl, array('resort' => 'idnumberdesc'));
$timecreatedurl = new moodle_url($baseurl, array('resort' => 'timecreated'));
$timecreateddescurl = new moodle_url($baseurl, array('resort' => 'timecreateddesc'));
$menu = new action_menu(array(
new action_menu_link_secondary($fullnameurl,
null,
get_string('sortbyx', 'moodle', get_string('fullnamecourse'))),
new action_menu_link_secondary($fullnameurldesc,
null,
get_string('sortbyxreverse', 'moodle', get_string('fullnamecourse'))),
new action_menu_link_secondary($shortnameurl,
null,
get_string('sortbyx', 'moodle', get_string('shortnamecourse'))),
new action_menu_link_secondary($shortnameurldesc,
null,
get_string('sortbyxreverse', 'moodle', get_string('shortnamecourse'))),
new action_menu_link_secondary($idnumberurl,
null,
get_string('sortbyx', 'moodle', get_string('idnumbercourse'))),
new action_menu_link_secondary($idnumberdescurl,
null,
get_string('sortbyxreverse', 'moodle', get_string('idnumbercourse'))),
new action_menu_link_secondary($timecreatedurl,
null,
get_string('sortbyx', 'moodle', get_string('timecreatedcourse'))),
new action_menu_link_secondary($timecreateddescurl,
null,
get_string('sortbyxreverse', 'moodle', get_string('timecreatedcourse')))
));
$menu->set_menu_trigger(get_string('resortcourses'));
$actions[] = $this->render($menu);
}
$strall = get_string('all');
$menu = new action_menu(array(
new action_menu_link_secondary(new moodle_url($this->page->url, array('perpage' => 5)), null, 5),
new action_menu_link_secondary(new moodle_url($this->page->url, array('perpage' => 10)), null, 10),
new action_menu_link_secondary(new moodle_url($this->page->url, array('perpage' => 20)), null, 20),
new action_menu_link_secondary(new moodle_url($this->page->url, array('perpage' => 50)), null, 50),
new action_menu_link_secondary(new moodle_url($this->page->url, array('perpage' => 100)), null, 100),
new action_menu_link_secondary(new moodle_url($this->page->url, array('perpage' => 999)), null, $strall),
));
if ((int)$perpage === 999) {
$perpage = $strall;
}
$menu->attributes['class'] .= ' courses-per-page';
$menu->set_menu_trigger(get_string('perpagea', 'moodle', $perpage));
$actions[] = $this->render($menu);
return html_writer::div(join(' ', $actions), 'listing-actions course-listing-actions');
}
/**
* Displays a search result listing.
*
* @param array $courses The courses to display.
* @param int $totalcourses The total number of courses to display.
* @param core_course_list_element $course The currently selected course if there is one.
* @param int $page The current page, starting at 0.
* @param int $perpage The number of courses to display per page.
* @param string $search The string we are searching for.
* @return string
*/
public function search_listing(array $courses, $totalcourses, core_course_list_element $course = null, $page = 0, $perpage = 20,
$search = '') {
$page = max($page, 0);
$perpage = max($perpage, 2);
$totalpages = ceil($totalcourses / $perpage);
if ($page > $totalpages - 1) {
$page = $totalpages - 1;
}
$courseid = isset($course) ? $course->id : null;
$first = true;
$last = false;
$i = $page * $perpage;
$html = html_writer::start_div('course-listing w-100', array(
'data-category' => 'search',
'data-page' => $page,
'data-totalpages' => $totalpages,
'data-totalcourses' => $totalcourses
));
$html .= html_writer::tag('h3', get_string('courses'));
$html .= $this->search_pagination($totalcourses, $page, $perpage);
$html .= html_writer::start_tag('ul', array('class' => 'ml'));
foreach ($courses as $listitem) {
$i++;
if ($i == $totalcourses) {
$last = true;
}
$html .= $this->search_listitem($listitem, $courseid, $first, $last);
$first = false;
}
$html .= html_writer::end_tag('ul');
$html .= $this->search_pagination($totalcourses, $page, $perpage, true, $search);
$html .= $this->course_search_bulk_actions();
$html .= html_writer::end_div();
return $html;
}
/**
* Renderers a search result course list item.
*
* This function will be called for every course being displayed by course_listing.
*
* @param core_course_list_element $course The course to produce HTML for.
* @param int $selectedcourse The id of the currently selected course.
* @return string
*/
public function search_listitem(core_course_list_element $course, $selectedcourse) {
$text = $course->get_formatted_name();
$attributes = array(
'class' => 'listitem listitem-course list-group-item list-group-item-action',
'data-id' => $course->id,
'data-selected' => ($selectedcourse == $course->id) ? '1' : '0',
'data-visible' => $course->visible ? '1' : '0'
);
$bulkcourseinput = '';
if (core_course_category::get($course->category)->can_move_courses_out_of()) {
$bulkcourseinput = array(
'type' => 'checkbox',
'name' => 'bc[]',
'value' => $course->id,
'class' => 'bulk-action-checkbox',
'aria-label' => get_string('bulkactionselect', 'moodle', $text),
'data-action' => 'select'
);
}
$viewcourseurl = new moodle_url($this->page->url, array('courseid' => $course->id));
$categoryname = core_course_category::get($course->category)->get_formatted_name();
$html = html_writer::start_tag('li', $attributes);
$html .= html_writer::start_div('clearfix');
$html .= html_writer::start_div('float-left');
if ($bulkcourseinput) {
$html .= html_writer::empty_tag('input', $bulkcourseinput).'&nbsp;';
}
$html .= html_writer::end_div();
$html .= html_writer::link($viewcourseurl, $text, array('class' => 'float-left coursename'));
$html .= html_writer::tag('span', $categoryname, array('class' => 'float-left categoryname'));
$html .= html_writer::start_div('float-right');
$html .= $this->search_listitem_actions($course);
$html .= html_writer::tag('span', s($course->idnumber), array('class' => 'dimmed idnumber'));
$html .= html_writer::end_div();
$html .= html_writer::end_div();
$html .= html_writer::end_tag('li');
return $html;
}
/**
* Renderers a key value pair of information for display.
*
* @param string $key
* @param string $value
* @param string $class
* @return string
*/
protected function detail_pair($key, $value, $class ='') {
$html = html_writer::start_div('detail-pair row yui3-g '.preg_replace('#[^a-zA-Z0-9_\-]#', '-', $class));
$html .= html_writer::div(html_writer::span($key), 'pair-key col-md-3 yui3-u-1-4 font-weight-bold');
$html .= html_writer::div(html_writer::span($value), 'pair-value col-md-8 yui3-u-3-4');
$html .= html_writer::end_div();
return $html;
}
/**
* A collection of actions for a course.
*
* @param core_course_list_element $course The course to display actions for.
* @return string
*/
public function course_detail_actions(core_course_list_element $course) {
$actions = \core_course\management\helper::get_course_detail_actions($course);
if (empty($actions)) {
return '';
}
$options = array();
foreach ($actions as $action) {
$options[] = $this->action_link($action['url'], $action['string'], null,
array('class' => 'btn btn-sm btn-secondary mr-1 mb-3'));
}
return html_writer::div(join('', $options), 'listing-actions course-detail-listing-actions');
}
}

58
classes/output/core_question/bank_renderer.php

@ -1,58 +0,0 @@
<?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/>.
/**
* Question renderer.
*
* @package theme_ilb
* @copyright 2017 onwards Ankit Agarwal <ankit.agrr@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace theme_ilb\output\core_question;
defined('MOODLE_INTERNAL') || die();
require_once($CFG->dirroot . '/' . $CFG->admin . '/renderer.php');
/**
* Question renderer class.
*
* @package theme_ilb
* @copyright 2017 onwards Ankit Agarwal <ankit.agrr@gmail.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class bank_renderer extends \core_question_bank_renderer {
/**
* Display additional navigation if needed.
*
* @return string
*/
public function extra_horizontal_navigation() {
// Horizontal navigation for question bank.
if ($questionnode = $this->page->settingsnav->find("questionbank", \navigation_node::TYPE_CONTAINER)) {
if ($children = $questionnode->children) {
$tabs = [];
foreach ($children as $key => $node) {
$tabs[] = new \tabobject($node->key, $node->action, $node->text);
}
$active = $questionnode->find_active_node()->key;
return \html_writer::div(print_tabs([$tabs], $active, null, null, true), 'questionbank-navigation');
}
}
return '';
}
}

653
classes/output/core_renderer.php

@ -16,23 +16,7 @@
namespace theme_ilb\output;
use coding_exception;
use html_writer;
use tabobject;
use tabtree;
use custom_menu_item;
use custom_menu;
use block_contents;
use navigation_node;
use action_link;
use stdClass;
use moodle_url;
use preferences_groups;
use action_menu;
use help_icon;
use single_button;
use context_course;
use pix_icon;
defined('MOODLE_INTERNAL') || die;
@ -46,70 +30,6 @@ defined('MOODLE_INTERNAL') || die;
class core_renderer extends \core_renderer {
/** @var custom_menu_item language The language menu if created */
protected $language = null;
/**
* Outputs the opening section of a box.
*
* @param string $classes A space-separated list of CSS classes
* @param string $id An optional ID
* @param array $attributes An array of other attributes to give the box.
* @return string the HTML to output.
*/
public function box_start($classes = 'generalbox', $id = null, $attributes = array()) {
if (is_array($classes)) {
$classes = implode(' ', $classes);
}
return parent::box_start($classes . ' py-3', $id, $attributes);
}
/**
* Wrapper for header elements.
*
* @return string HTML to display the main header.
*/
public function full_header() {
global $PAGE;
$header = new stdClass();
$header->settingsmenu = $this->context_header_settings_menu();
$header->contextheader = $this->context_header();
$header->hasnavbar = empty($PAGE->layout_options['nonavbar']);
$header->navbar = $this->navbar();
$header->pageheadingbutton = $this->page_heading_button();
$header->courseheader = $this->course_header();
return $this->render_from_template('theme_ilb/header', $header);
}
/**
* The standard tags that should be included in the <head> tag
* including a meta description for the front page
*
* @return string HTML fragment.
*/
public function standard_head_html() {
global $SITE, $PAGE;
$output = parent::standard_head_html();
if ($PAGE->pagelayout == 'frontpage') {
$summary = s(strip_tags(format_text($SITE->summary, FORMAT_HTML)));
if (!empty($summary)) {
$output .= "<meta name=\"description\" content=\"$summary\" />\n";
}
}
return $output;
}
/*
* This renders the navbar.
* Uses bootstrap compatible html.
*/
public function navbar() {
return $this->render_from_template('core/navbar', $this->page->navbar);
}
/**
* We don't like these...
*
@ -117,577 +37,4 @@ class core_renderer extends \core_renderer {
public function edit_button(moodle_url $url) {
return '';
}
/**
* Override to inject the logo.
*
* @param array $headerinfo The header info.
* @param int $headinglevel What level the 'h' tag will be.
* @return string HTML for the header bar.
*/
public function context_header($headerinfo = null, $headinglevel = 1) {
global $SITE;
if ($this->should_display_main_logo($headinglevel)) {
$sitename = format_string($SITE->fullname, true, array('context' => context_course::instance(SITEID)));
return html_writer::div(html_writer::empty_tag('img', [
'src' => $this->get_logo_url(null, 150), 'alt' => $sitename, 'class' => 'img-fluid']), 'logo');
}
return parent::context_header($headerinfo, $headinglevel);
}
/**
* Get the compact logo URL.
*
* @return string
*/
public function get_compact_logo_url($maxwidth = 100, $maxheight = 100) {
return parent::get_compact_logo_url(null, 70);
}
/**
* Whether we should display the main logo.
*
* @return bool
*/
public function should_display_main_logo($headinglevel = 1) {
global $PAGE;
// Only render the logo if we're on the front page or login page and the we have a logo.
$logo = $this->get_logo_url();
if ($headinglevel == 1 && !empty($logo)) {
if ($PAGE->pagelayout == 'frontpage' || $PAGE->pagelayout == 'login') {
return true;
}
}
return false;
}
/**
* Whether we should display the logo in the navbar.
*
* We will when there are no main logos, and we have compact logo.
*
* @return bool
*/
public function should_display_navbar_logo() {
$logo = $this->get_compact_logo_url();
return !empty($logo) && !$this->should_display_main_logo();
}
/*
* Overriding the custom_menu function ensures the custom menu is
* always shown, even if no menu items are configured in the global
* theme settings page.
*/
public function custom_menu($custommenuitems = '') {
global $CFG;
if (empty($custommenuitems) && !empty($CFG->custommenuitems)) {
$custommenuitems = $CFG->custommenuitems;
}
$custommenu = new custom_menu($custommenuitems, current_language());
return $this->render_custom_menu($custommenu);
}
/**
* We want to show the custom menus as a list of links in the footer on small screens.
* Just return the menu object exported so we can render it differently.
*/
public function custom_menu_flat() {
global $CFG;
$custommenuitems = '';
if (empty($custommenuitems) && !empty($CFG->custommenuitems)) {
$custommenuitems = $CFG->custommenuitems;
}
$custommenu = new custom_menu($custommenuitems, current_language());
$langs = get_string_manager()->get_list_of_translations();
$haslangmenu = $this->lang_menu() != '';
if ($haslangmenu) {
$strlang = get_string('language');
$currentlang = current_language();
if (isset($langs[$currentlang])) {
$currentlang = $langs[$currentlang];
} else {
$currentlang = $strlang;
}
$this->language = $custommenu->add($currentlang, new moodle_url('#'), $strlang, 10000);
foreach ($langs as $langtype => $langname) {
$this->language->add($langname, new moodle_url($this->page->url, array('lang' => $langtype)), $langname);
}
}
return $custommenu->export_for_template($this);
}
/*
* This renders the bootstrap top menu.
*
* This renderer is needed to enable the Bootstrap style navigation.
*/
protected function render_custom_menu(custom_menu $menu) {
global $CFG;
$langs = get_string_manager()->get_list_of_translations();
$haslangmenu = $this->lang_menu() != '';
if (!$menu->has_children() && !$haslangmenu) {
return '';
}
if ($haslangmenu) {
$strlang = get_string('language');
$currentlang = current_language();
if (isset($langs[$currentlang])) {
$currentlang = $langs[$currentlang];
} else {
$currentlang = $strlang;
}
$this->language = $menu->add($currentlang, new moodle_url('#'), $strlang, 10000);
foreach ($langs as $langtype => $langname) {
$this->language->add($langname, new moodle_url($this->page->url, array('lang' => $langtype)), $langname);
}
}
$content = '';
foreach ($menu->get_children() as $item) {
$context = $item->export_for_template($this);
$content .= $this->render_from_template('core/custom_menu_item', $context);
}
return $content;
}
/**
* This code renders the navbar button to control the display of the custom menu
* on smaller screens.
*
* Do not display the button if the menu is empty.
*
* @return string HTML fragment
*/
public function navbar_button() {
global $CFG;
if (empty($CFG->custommenuitems) && $this->lang_menu() == '') {
return '';
}
$iconbar = html_writer::tag('span', '', array('class' => 'icon-bar'));
$button = html_writer::tag('a', $iconbar . "\n" . $iconbar. "\n" . $iconbar, array(
'class' => 'btn btn-navbar',
'data-toggle' => 'collapse',
'data-target' => '.nav-collapse'
));
return $button;
}
/**
* Renders tabtree
*
* @param tabtree $tabtree
* @return string
*/
protected function render_tabtree(tabtree $tabtree) {
if (empty($tabtree->subtree)) {
return '';
}
$data = $tabtree->export_for_template($this);
return $this->render_from_template('core/tabtree', $data);
}
/**
* Renders tabobject (part of tabtree)
*
* This function is called from {@link core_renderer::render_tabtree()}
* and also it calls itself when printing the $tabobject subtree recursively.
*
* @param tabobject $tabobject
* @return string HTML fragment
*/
protected function render_tabobject(tabobject $tab) {
throw new coding_exception('Tab objects should not be directly rendered.');
}
/**
* Prints a nice side block with an optional header.
*
* @param block_contents $bc HTML for the content
* @param string $region the region the block is appearing in.
* @return string the HTML to be output.
*/
public function block(block_contents $bc, $region) {
$bc = clone($bc); // Avoid messing up the object passed in.
if (empty($bc->blockinstanceid) || !strip_tags($bc->title)) {
$bc->collapsible = block_contents::NOT_HIDEABLE;
}
$id = !empty($bc->attributes['id']) ? $bc->attributes['id'] : uniqid('block-');
$context = new stdClass();
$context->skipid = $bc->skipid;
$context->blockinstanceid = $bc->blockinstanceid;
$context->dockable = $bc->dockable;
$context->id = $id;
$context->hidden = $bc->collapsible == block_contents::HIDDEN;
$context->skiptitle = strip_tags($bc->title);
$context->showskiplink = !empty($context->skiptitle);
$context->arialabel = $bc->arialabel;
$context->ariarole = !empty($bc->attributes['role']) ? $bc->attributes['role'] : 'complementary';
$context->type = $bc->attributes['data-block'];
$context->title = $bc->title;
$context->content = $bc->content;
$context->annotation = $bc->annotation;
$context->footer = $bc->footer;
$context->hascontrols = !empty($bc->controls);
if ($context->hascontrols) {
$context->controls = $this->block_controls($bc->controls, $id);
}
return $this->render_from_template('core/block', $context);
}
/**
* Returns the CSS classes to apply to the body tag.
*
* @since Moodle 2.5.1 2.6
* @param array $additionalclasses Any additional classes to apply.
* @return string
*/
public function body_css_classes(array $additionalclasses = array()) {
return $this->page->bodyclasses . ' ' . implode(' ', $additionalclasses);
}
/**
* Renders preferences groups.
*
* @param preferences_groups $renderable The renderable
* @return string The output.
*/
public function render_preferences_groups(preferences_groups $renderable) {
return $this->render_from_template('core/preferences_groups', $renderable);
}
/**
* Renders an action menu component.
*
* @param action_menu $menu
* @return string HTML
*/
public function render_action_menu(action_menu $menu) {
// We don't want the class icon there!
foreach ($menu->get_secondary_actions() as $action) {
if ($action instanceof \action_menu_link && $action->has_class('icon')) {
$action->attributes['class'] = preg_replace('/(^|\s+)icon(\s+|$)/i', '', $action->attributes['class']);
}
}
if ($menu->is_empty()) {
return '';
}
$context = $menu->export_for_template($this);
return $this->render_from_template('core/action_menu', $context);
}
/**
* Implementation of user image rendering.
*
* @param help_icon $helpicon A help icon instance
* @return string HTML fragment
*/
protected function render_help_icon(help_icon $helpicon) {
$context = $helpicon->export_for_template($this);
return $this->render_from_template('core/help_icon', $context);
}
/**
* Renders a single button widget.
*
* This will return HTML to display a form containing a single button.
*
* @param single_button $button
* @return string HTML fragment
*/
protected function render_single_button(single_button $button) {
return $this->render_from_template('core/single_button', $button->export_for_template($this));
}
/**
* Renders the login form.
*
* @param \core_auth\output\login $form The renderable.
* @return string
*/
public function render_login(\core_auth\output\login $form) {
global $CFG, $SITE;
$context = $form->export_for_template($this);
// Override because rendering is not supported in template yet.
if ($CFG->rememberusername == 0) {
$context->cookieshelpiconformatted = $this->help_icon('cookiesenabledonlysession');
} else {
$context->cookieshelpiconformatted = $this->help_icon('cookiesenabled');
}
$context->errorformatted = $this->error_text($context->error);
$url = $this->get_logo_url();
if ($url) {
$url = $url->out(false);
}
$context->logourl = $url;
$context->sitename = format_string($SITE->fullname, true,
['context' => context_course::instance(SITEID), "escape" => false]);
return $this->render_from_template('core/loginform', $context);
}
/**
* Render the login signup form into a nice template for the theme.
*
* @param mform $form
* @return string
*/
public function render_login_signup_form($form) {
global $SITE;
$context = $form->export_for_template($this);
$url = $this->get_logo_url();
if ($url) {
$url = $url->out(false);
}
$context['logourl'] = $url;
$context['sitename'] = format_string($SITE->fullname, true,
['context' => context_course::instance(SITEID), "escape" => false]);
return $this->render_from_template('core/signup_form_layout', $context);
}
/**
* This is an optional menu that can be added to a layout by a theme. It contains the
* menu for the course administration, only on the course main page.
*
* @return string
*/
public function context_header_settings_menu() {
$context = $this->page->context;
$menu = new action_menu();
$items = $this->page->navbar->get_items();
$currentnode = end($items);
$showcoursemenu = false;
$showfrontpagemenu = false;
$showusermenu = false;
// We are on the course home page.
if (($context->contextlevel == CONTEXT_COURSE) &&
!empty($currentnode) &&
($currentnode->type == navigation_node::TYPE_COURSE || $currentnode->type == navigation_node::TYPE_SECTION)) {
$showcoursemenu = true;
}
$courseformat = course_get_format($this->page->course);
// This is a single activity course format, always show the course menu on the activity main page.
if ($context->contextlevel == CONTEXT_MODULE &&
!$courseformat->has_view_page()) {
$this->page->navigation->initialise();
$activenode = $this->page->navigation->find_active_node();
// If the settings menu has been forced then show the menu.
if ($this->page->is_settings_menu_forced()) {
$showcoursemenu = true;
} else if (!empty($activenode) && ($activenode->type == navigation_node::TYPE_ACTIVITY ||
$activenode->type == navigation_node::TYPE_RESOURCE)) {
// We only want to show the menu on the first page of the activity. This means
// the breadcrumb has no additional nodes.
if ($currentnode && ($currentnode->key == $activenode->key && $currentnode->type == $activenode->type)) {
$showcoursemenu = true;
}
}
}
// This is the site front page.
if ($context->contextlevel == CONTEXT_COURSE &&
!empty($currentnode) &&
$currentnode->key === 'home') {
$showfrontpagemenu = true;
}
// This is the user profile page.
if ($context->contextlevel == CONTEXT_USER &&
!empty($currentnode) &&
($currentnode->key === 'myprofile')) {
$showusermenu = true;
}
if ($showfrontpagemenu) {
$settingsnode = $this->page->settingsnav->find('frontpage', navigation_node::TYPE_SETTING);
if ($settingsnode) {
// Build an action menu based on the visible nodes from this navigation tree.
$skipped = $this->build_action_menu_from_navigation($menu, $settingsnode, false, true);
// We only add a list to the full settings menu if we didn't include every node in the short menu.
if ($skipped) {
$text = get_string('morenavigationlinks');
$url = new moodle_url('/course/admin.php', array('courseid' => $this->page->course->id));
$link = new action_link($url, $text, null, null, new pix_icon('t/edit', ''));
$menu->add_secondary_action($link);
}
}
} else if ($showcoursemenu) {
$settingsnode = $this->page->settingsnav->find('courseadmin', navigation_node::TYPE_COURSE);
if ($settingsnode) {
// Build an action menu based on the visible nodes from this navigation tree.
$skipped = $this->build_action_menu_from_navigation($menu, $settingsnode, false, true);
// We only add a list to the full settings menu if we didn't include every node in the short menu.
if ($skipped) {
$text = get_string('morenavigationlinks');
$url = new moodle_url('/course/admin.php', array('courseid' => $this->page->course->id));
$link = new action_link($url, $text, null, null, new pix_icon('t/edit', ''));
$menu->add_secondary_action($link);
}
}
} else if ($showusermenu) {
// Get the course admin node from the settings navigation.
$settingsnode = $this->page->settingsnav->find('useraccount', navigation_node::TYPE_CONTAINER);
if ($settingsnode) {
// Build an action menu based on the visible nodes from this navigation tree.
$this->build_action_menu_from_navigation($menu, $settingsnode);
}
}
return $this->render($menu);
}
/**
* This is an optional menu that can be added to a layout by a theme. It contains the
* menu for the most specific thing from the settings block. E.g. Module administration.
*
* @return string
*/
public function region_main_settings_menu() {
$context = $this->page->context;
$menu = new action_menu();
if ($context->contextlevel == CONTEXT_MODULE) {
$this->page->navigation->initialise();
$node = $this->page->navigation->find_active_node();
$buildmenu = false;
// If the settings menu has been forced then show the menu.
if ($this->page->is_settings_menu_forced()) {
$buildmenu = true;
} else if (!empty($node) && ($node->type == navigation_node::TYPE_ACTIVITY ||
$node->type == navigation_node::TYPE_RESOURCE)) {
$items = $this->page->navbar->get_items();
$navbarnode = end($items);
// We only want to show the menu on the first page of the activity. This means
// the breadcrumb has no additional nodes.
if ($navbarnode && ($navbarnode->key === $node->key && $navbarnode->type == $node->type)) {
$buildmenu = true;
}
}
if ($buildmenu) {
// Get the course admin node from the settings navigation.
$node = $this->page->settingsnav->find('modulesettings', navigation_node::TYPE_SETTING);
if ($node) {
// Build an action menu based on the visible nodes from this navigation tree.
$this->build_action_menu_from_navigation($menu, $node);
}
}
} else if ($context->contextlevel == CONTEXT_COURSECAT) {
// For course category context, show category settings menu, if we're on the course category page.
if ($this->page->pagetype === 'course-index-category') {
$node = $this->page->settingsnav->find('categorysettings', navigation_node::TYPE_CONTAINER);
if ($node) {
// Build an action menu based on the visible nodes from this navigation tree.
$this->build_action_menu_from_navigation($menu, $node);
}
}
} else {
$items = $this->page->navbar->get_items();
$navbarnode = end($items);
if ($navbarnode && ($navbarnode->key === 'participants')) {
$node = $this->page->settingsnav->find('users', navigation_node::TYPE_CONTAINER);
if ($node) {
// Build an action menu based on the visible nodes from this navigation tree.
$this->build_action_menu_from_navigation($menu, $node);
}
}
}
return $this->render($menu);
}
/**
* Take a node in the nav tree and make an action menu out of it.
* The links are injected in the action menu.
*
* @param action_menu $menu
* @param navigation_node $node
* @param boolean $indent
* @param boolean $onlytopleafnodes
* @return boolean nodesskipped - True if nodes were skipped in building the menu
*/
protected function build_action_menu_from_navigation(action_menu $menu,
navigation_node $node,
$indent = false,
$onlytopleafnodes = false) {
$skipped = false;
// Build an action menu based on the visible nodes from this navigation tree.
foreach ($node->children as $menuitem) {
if ($menuitem->display) {
if ($onlytopleafnodes && $menuitem->children->count()) {
$skipped = true;
continue;
}
if ($menuitem->action) {
if ($menuitem->action instanceof action_link) {
$link = $menuitem->action;
// Give preference to setting icon over action icon.
if (!empty($menuitem->icon)) {
$link->icon = $menuitem->icon;
}
} else {
$link = new action_link($menuitem->action, $menuitem->text, null, null, $menuitem->icon);
}
} else {
if ($onlytopleafnodes) {
$skipped = true;
continue;
}
$link = new action_link(new moodle_url('#'), $menuitem->text, null, ['disabled' => true], $menuitem->icon);
}
if ($indent) {
$link->add_class('ml-4');
}
if (!empty($menuitem->classes)) {
$link->add_class(implode(" ", $menuitem->classes));
}
$menu->add_secondary_action($link);
$skipped = $skipped || $this->build_action_menu_from_navigation($menu, $menuitem, true);
}
}
return $skipped;
}
/**
* Secure login info.
*
* @return string
*/
public function secure_login_info() {
return $this->login_info(false);
}
}

197
classes/output/core_renderer_maintenance.php

@ -1,197 +0,0 @@
<?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/>.
/**
* Overriden core maintenance renderer.
*
* @package theme_ilb
* @copyright 2016 Frédéric Massart - FMCorz.net
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace theme_ilb\output;
defined('MOODLE_INTERNAL') || die();
use coding_exception;
use moodle_page;
use block_contents;
use stdClass;
/**
* The maintenance renderer.
*
* @package theme_ilb
* @copyright 2016 Frédéric Massart - FMCorz.net
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class core_renderer_maintenance extends core_renderer {
/**
* Initialises the renderer instance.
*
* @param moodle_page $page
* @param string $target
* @throws coding_exception
*/
public function __construct(moodle_page $page, $target) {
if ($target !== RENDERER_TARGET_MAINTENANCE || $page->pagelayout !== 'maintenance') {
throw new coding_exception('Invalid request for the maintenance renderer.');
}
parent::__construct($page, $target);
}
/**
* Does nothing. The maintenance renderer cannot produce blocks.
*
* @param block_contents $bc
* @param string $region
* @return string
*/
public function block(block_contents $bc, $region) {
return '';
}
/**
* Does nothing. The maintenance renderer cannot produce blocks.
*
* @param string $region
* @param array $classes
* @param string $tag
* @return string
*/
public function blocks($region, $classes = array(), $tag = 'aside') {
return '';
}
/**
* Does nothing. The maintenance renderer cannot produce blocks.
*
* @param string $region
* @return string
*/
public function blocks_for_region($region) {
return '';
}
/**
* Does nothing. The maintenance renderer cannot produce a course content header.
*
* @param bool $onlyifnotcalledbefore
* @return string
*/
public function course_content_header($onlyifnotcalledbefore = false) {
return '';
}
/**
* Does nothing. The maintenance renderer cannot produce a course content footer.
*
* @param bool $onlyifnotcalledbefore
* @return string
*/
public function course_content_footer($onlyifnotcalledbefore = false) {
return '';
}
/**
* Does nothing. The maintenance renderer cannot produce a course header.
*
* @return string
*/
public function course_header() {
return '';
}
/**
* Does nothing. The maintenance renderer cannot produce a course footer.
*
* @return string
*/
public function course_footer() {
return '';
}
/**
* Does nothing. The maintenance renderer cannot produce a custom menu.
*
* @param string $custommenuitems
* @return string
*/
public function custom_menu($custommenuitems = '') {
return '';
}
/**
* Does nothing. The maintenance renderer cannot produce a file picker.
*
* @param array $options
* @return string
*/
public function file_picker($options) {
return '';
}
/**
* Does nothing. The maintenance renderer cannot produce and HTML file tree.
*
* @param array $dir
* @return string
*/
public function htmllize_file_tree($dir) {
return '';
}
/**
* Does nothing. The maintenance renderer does not support JS.
*
* @param block_contents $bc
*/
public function init_block_hider_js(block_contents $bc) {
// Does nothing.
}
/**
* Does nothing. The maintenance renderer cannot produce language menus.
*
* @return string
*/
public function lang_menu() {
return '';
}
/**
* Does nothing. The maintenance renderer has no need for login information.
*
* @param null $withlinks
* @return string
*/
public function login_info($withlinks = null) {
return '';
}
/**
* Does nothing. The maintenance renderer cannot produce user pictures.
*
* @param stdClass $user
* @param array $options
* @return string
*/
public function user_picture(stdClass $user, array $options = null) {
return '';
}
}

44
classes/output/gradereport_history_renderer.php

@ -1,44 +0,0 @@
<?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/>.
/**
* Overriden gradereport_history renderer.
*
* @package theme_ilb
* @copyright 2016 Frédéric Massart - FMCorz.net
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace theme_ilb\output;
defined('MOODLE_INTERNAL') || die();
use gradereport_history\output\user_button;
/**
* Overriden gradereport_history renderer.
*
* @package theme_ilb
* @copyright 2016 Frédéric Massart - FMCorz.net
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class gradereport_history_renderer extends \gradereport_history\output\renderer {
public function render_user_button(user_button $button) {
$data = $button->export_for_template($this);
return $this->render_from_template('gradereport_history/user_button', $data);
}
}

12
scss/bootstrap/utilities/_position.scss

@ -27,10 +27,8 @@ $positions: static, relative, absolute, fixed, sticky;
z-index: $zindex-fixed;
}
// .sticky-top {
// @supports (position: sticky) {
// position: sticky;
// top: 0;
// z-index: $zindex-sticky;
// }
// }
.sticky-top {
position: sticky;
top: 0;
z-index: $zindex-sticky;
}

18
templates/block_search_forums/search_form.mustache

@ -1,18 +0,0 @@
<div class="searchform">
<form action="{{actionurl}}" class="form-inline">
<input type="hidden" name="id" value="{{courseid}}">
<div class="input-group w-100">
<label class="sr-only" for="searchform_search">{{#str}}search{{/str}}</label>
<input id="searchform_search" name="search" type="text" class="form-control" size="10">
<div class="input-group-append">
<button class="btn btn-secondary" id="searchform_button" type="submit">{{#str}}go{{/str}}</button>
</div>
</div>
</form>
<div class="mt-3">
<a href="{{advancedsearchurl}}">{{#str}}advancedsearch, block_search_forums{{/str}}</a>
{{#helpicon}}
{{>core/help_icon}}
{{/helpicon}}
</div>
</div>

7
templates/block_settings/search_form.mustache

@ -1,7 +0,0 @@
<form method="get" action="{{action}}" class="adminsearchform form-inline" role="search">
<div class="form-group">
<label class="sr-only" for="adminsearchquery">{{label}}</label>
<input class="form-control" type="text" name="query" value="{{searchvalue}}" id="adminsearchquery" size="10">
</div>
<input type="submit" class="btn btn-secondary" value={{#quote}}{{#str}}search{{/str}}{{/quote}}>
</form>

55
templates/core/action_menu.mustache

@ -1,55 +0,0 @@
{{!
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/>.
}}
{{!
@template core/action_menu
Action menu.
Example context (json):
{
"classes": "",
"primary": {
"items": [{"rawhtml": "<p>Item in primary menu</p>"}]
},
"secondary": {
"items": [{"rawhtml": "<p>Item in secondary menu</p>"}]
}
}
}}
<div class="action-menu {{classes}} d-inline"{{#attributes}} {{name}}="{{value}}"{{/attributes}}>
{{#primary}}
<div class="{{classes}} d-flex "{{#attributes}} {{name}}="{{value}}"{{/attributes}}>
{{#prioritise}}{{> core/action_menu_trigger }}{{/prioritise}}
{{#items}}
<div class="action-menu-item">
{{> core/action_menu_item }}
</div>
{{/items}}
{{^prioritise}}
<div class="action-menu-trigger">
{{> core/action_menu_trigger }}
</div>
{{/prioritise}}
</div>
{{/primary}}
</div>

31
templates/core/action_menu_item.mustache

@ -1,31 +0,0 @@
{{!
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/>.
}}
{{!
@template core/action_menu_item
Action menu item.
Example context (json):
{
"rawhtml": "<p>[rawhtml]</p>"
}
}}
{{#actionmenulink}}{{> core/action_menu_link }}{{/actionmenulink}}
{{#actionmenufiller}}<span class="filler">&nbsp;</span>{{/actionmenufiller}}
{{#actionlink}}{{> core/action_link }}{{/actionlink}}
{{#pixicon}}{{#pix}}{{key}}, {{component}}, {{title}}{{/pix}}{{/pixicon}}
{{#rawhtml}}{{{.}}}{{/rawhtml}}

34
templates/core/action_menu_link.mustache

@ -1,34 +0,0 @@
{{!
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/>.
}}
{{!
@template core/action_menu_link
Action menu link.
Example context (json):
{
"text": "Example link text",
"showtext": true,
"url": "http://example.com/link"
}
}}
{{^disabled}}
<a href="{{url}}" class="{{classes}}" {{#attributes}}{{name}}={{#quote}}{{value}}{{/quote}} {{/attributes}}{{#showtext}}aria-labelledby="actionmenuaction-{{instance}}"{{/showtext}}>{{#icon}}{{#pix}}{{key}}, {{component}}, {{title}}{{/pix}}{{/icon}}{{#showtext}}<span class="menu-action-text" id="actionmenuaction-{{instance}}">{{{text}}}</span>{{/showtext}}</a>
{{/disabled}}
{{#disabled}}
<span class="currentlink" role="menuitem">{{#icon}}{{#pix}}{{key}},{{component}},{{title}}{{/pix}}{{/icon}}{{{text}}}</span>
{{/disabled}}

120
templates/core/action_menu_trigger.mustache

@ -1,120 +0,0 @@
{{!
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/>.
}}
{{!
@template core/action_menu_trigger
Action menu trigger.
Example context (json):
{
"text": "Example link text",
"title": "Example link title",
"url": "http://example.com/link",
"classes": "icon menu-action",
"instance": "1",
"triggerextraclasses": "",
"attributes": [
{"name": "role", "value": "menuitem" },
{"name": "data-title", "value": "mymoodle,admin" }
],
"secondary": {
"classes": "menu align-tr-br",
"attributes": [
{"name": "id", "value": "action-menu-0-menu"},
{"name": "data-rel", "value": "menu-content"},
{"name": "role", "value": "menu"},
{"name": "data-align", "value": "tr-br"}
],
"items": [
{"actionmenulink":
{
"id": "action_link59ecf8394a68078",
"disabled": false,
"text": "Dashboard",
"url": "http://example.com/link",
"icon": {
"key": "i/dashboard",
"component": null,
"title": "Dashboard"
},
"classes": "icon menu-action",
"attributes": [
{"name": "role", "value": "menuitem"},
{"name": "data-title", "value": "mymoodle,admin"}
],
"instance": 1,
"showtext": true
}
},
{"actionmenufiller":
{
"id": "action_link59ecf8394a68079",
"disabled": false,
"text": "",
"url": "",
"icon": null,
"classes": "",
"attributes": [
{"name": "role", "value": "menuitem"}
]
}
}
]
}
}
}}
<div class="dropdown">
<a href="#" tabindex="0" class="{{triggerextraclasses}} dropdown-toggle icon-no-margin" id="dropdown-{{instance}}" aria-label="{{title}}" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" aria-controls="action-menu-{{instance}}-menu">
{{{actiontext}}}
{{{menutrigger}}}
{{#icon}}
{{#pix}}
{{key}},{{component}},{{title}}
{{/pix}}
{{/icon}}
{{#rawicon}}{{{.}}}{{/rawicon}}
{{#menutrigger}}
<b class="caret"></b>
{{/menutrigger}}
</a>
{{#secondary}}
<div class="dropdown-menu dropdown-menu-right {{classes}}"{{#attributes}} {{name}}="{{value}}"{{/attributes}} id="dropdown-menu-{{instance}}">
{{#items}}
{{#actionmenulink}}
<a href="{{url}}" class="dropdown-item {{classes}}" {{#attributes}}{{name}}={{#quote}}{{value}}{{/quote}} {{/attributes}}{{#showtext}}aria-labelledby="actionmenuaction-{{instance}}"{{/showtext}}>
{{#icon}}
{{#pix}}{{key}},{{component}},{{title}}{{/pix}}
{{/icon}}
{{#showtext}}
<span class="menu-action-text" id="actionmenuaction-{{instance}}">
{{{text}}}
</span>
{{/showtext}}
</a>
{{/actionmenulink}}
{{#actionmenufiller}}
<div class="dropdown-divider" role="presentation"><span class="filler">&nbsp;</span></div>
{{/actionmenufiller}}
{{^actionmenulink}}
{{^actionmenufiller}}
<div class="dropdown-item">{{> core/action_menu_item }}</div>
{{/actionmenufiller}}
{{/actionmenulink}}
{{/items}}
</div>
{{/secondary}}
</div>

58
templates/core/auth_digital_minor_page.mustache

@ -1,58 +0,0 @@
{{!
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/>.
}}
{{!
@template core_auth/output/digital_minor_page
Example context (json):
{
"logourl": "https://moodle.org/logo/moodle-logo.svg",
"sitename": "Site name",
"supportname": "John Doe",
"supportemail": "johndoe@example.com",
"homelink": "/"
}
}}
<div class="container-fluid mt-1 mt-md-5">
<div class="row justify-content-md-center">
<div class="col-md-8 push-md-2 col-xl-6 push-xl-3">
<div class="card">
<div class="card-body">
<div class="card-title text-xs-center">
{{#logourl}}
<h2><img src="{{logourl}}" title="{{sitename}}" alt="{{sitename}}"/></h2>
{{/logourl}}
{{^logourl}}
<h2>{{sitename}}</h2>
{{/logourl}}
<hr>
</div>
<div class="card-title">
<h3>{{#str}}considereddigitalminor{{/str}}</h3>
</div>
<div class="p-t-1 p-b-2">
<p>{{#str}}digitalminor_desc{{/str}}</p>
<p class="m-b-0">{{{supportname}}}</p>
<p class="m-b-0">{{{supportemail}}}</p>
</div>
<div class="backlink">
<a href="{{homelink}}">{{#str}}backtohome{{/str}}</a>
</div>
</div>
</div>
</div>
</div>
</div>

64
templates/core/auth_verify_age_location_page.mustache

@ -1,64 +0,0 @@
{{!
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/>.
}}
{{!
@template core_auth/output/verify_age_location_page
Example context (json):
{
"logourl": "https://moodle.org/logo/moodle-logo.svg",
"sitename": "Site name",
"error": "Error message",
"formhtml": "(Form html would go here)"
}
}}
<div class="container-fluid mt-1 mt-md-5">
<div class="row justify-content-md-center">
<div class="col-md-8 push-md-2 col-xl-6 push-xl-3">
<div class="card">
<div class="card-body">
<div class="card-title text-xs-center">
{{#logourl}}
<h2><img src="{{logourl}}" title="{{sitename}}" alt="{{sitename}}"/></h2>
{{/logourl}}
{{^logourl}}
<h2>{{sitename}}</h2>
{{/logourl}}
<hr>
</div>
{{#error}}
<div class="alert alert-danger" role="alert" data-aria-autofocus="true">
{{{error}}}
</div>
{{/error}}
<div class="card-title">
<h3>{{#str}}agelocationverification{{/str}}</h3>
</div>
<div class="m-t-2 m-b-2">
{{{formhtml}}}
</div>
<hr>
<div class="card-title">
<h3>{{#str}}whyisthisrequired{{/str}}</h3>
</div>
<div class="m-t-1">
<p >{{#str}}explanationdigitalminor{{/str}}</p>
</div>
</div>
</div>
</div>
</div>
</div>

61
templates/core/availability_info.mustache

@ -1,61 +0,0 @@
{{!
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/>.
}}
{{!
@template core/availability_info
Renders the availability info on the course outline page.
Availability info can be displayed for activity modules or whole course
sections. Activity modules can be either hidden from students, or available
but not shown on course page (stealth), or the access can be restricted by
configured conditions. Sections can be hidden.
Classes required for JS:
* none
Data attributes required for JS:
* none
Context variables required for this template:
* classes String list of CSS classes for the wrapping element
* text HTML formatted text with the actual availability information
* ishidden Boolean flag indiciating that the item is hidden from students
* isstealth Boolean flag indicating that the item is in stealth mode
* isrestricted Boolean flag indicating that restricted access conditions apply
* isfullinfo Boolean flag indicating that the full list of restricted
access conditions is displayed (aka teacher's view).
Example context (json):
{
"classes": "",
"text": "Not available unless: <ul><li>It is on or after <strong>8 June 2012</strong></li></ul>",
"ishidden": 0,
"isstealth": 0,
"isrestricted": 1,
"isfullinfo": 1
}
}}
{{#text}}
<div class="availabilityinfo {{classes}}">
{{^isrestricted}}
<span class="tag tag-info">{{{text}}}</span>
{{/isrestricted}}
{{#isrestricted}}
<span class="tag tag-info">{{#str}}restricted, core{{/str}}</span> {{{text}}}
{{/isrestricted}}
</div>
{{/text}}

63
templates/core/block.mustache

@ -1,63 +0,0 @@
{{!
@template theme_ilb/block
Example context (json):
{
"id": "block0",
"showskiplink": true,
"type": "html",
"ariarole": "complementary",
"title": "Test block",
"blockinstanceid": 1,
"content": "<p>Hello block world!</p>"
}
}}
{{! Block Skip Link }}
{{#showskiplink}}
<a href="#sb-{{skipid}}" class="sr-only sr-only-focusable">{{#str}}skipa, access, {{title}}{{/str}}</a>
{{/showskiplink}}
{{! Start Block Container }}
<section id="{{id}}"
class="{{#hidden}}hidden{{/hidden}} block block_{{type}} {{#hascontrols}}block_with_controls{{/hascontrols}} card mb-3"
role="{{ariarole}}"
data-block="{{type}}"
{{#arialabel}}
aria-label={{#quote}}{{{arialabel}}}{{/quote}}
{{/arialabel}}
{{^arialabel}}
{{#title}}
aria-labelledby="instance-{{blockinstanceid}}-header"
{{/title}}
{{/arialabel}}>
{{! Block contents }}
<div class="card-body p-3">
{{! Block header }}
{{#title}}
<h5 id="instance-{{blockinstanceid}}-header" class="card-title d-inline">{{{title}}}</h5>
{{/title}}
{{#hascontrols}}
<div class="block-controls pull-right header">
{{{controls}}}
</div>
{{/hascontrols}}
<div class="card-text content mt-3">
{{{content}}}
<div class="footer">{{{footer}}}</div>
{{{annotation}}}
</div>
</div>
{{! End Block Container }}
</section>
{{! Block Skip Link Target }}
{{#showskiplink}}
<span id="sb-{{skipid}}"></span>
{{/showskiplink}}

80
templates/core/chooser.mustache

@ -1,80 +0,0 @@
{{!
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/>.
}}
{{!
@template core/chooser
Chooser.
Example context (json):
{
"title": "Chooser title",
"method": "post",
"actionurl": "http://example.org/test",
"instructions": "Choose one:",
"paramname": "param",
"sections": [{
"id": "section-1",
"label": "Section one",
"items": [{
"label": "item one",
"description": "description one"
}]
}]
}
}}
<div class="hd choosertitle">
{{title}}
</div>
<div class="chooserdialoguebody">
<div class="choosercontainer">
<div id="chooseform">
<form action="{{actionurl}}" id="chooserform" method="{{method}}">
<div id="typeformdiv">
{{#params}}
<input type="hidden" id="{{id}}" name="{{name}}" value="{{value}}">
{{/params}}
<input type="hidden" name="sesskey" value="{{sesskey}}">
</div>
<div class="options">
<div class="instruction">
{{instructions}}
</div>
<div class="alloptions">
{{#sections}}
<div class="moduletypetitle">
<label for="item_{{id}}">
<span class="typename">{{label}}</span>
</label>
</div>
{{#items}}
{{>core/chooser_item}}
{{/items}}
{{/sections}}
</div>
</div>
<div class="submitbuttons">
<input type="submit" name="submitbutton" class="submitbutton btn btn-primary" value={{#quote}}{{#str}}add{{/str}}{{/quote}}>
<input type="submit" name="addcancel" class="addcancel btn btn-secondary" value={{#quote}}{{#str}}cancel{{/str}}{{/quote}}>
</div>
</form>
</div>
</div>
</div>

48
templates/core/columns-1to1to1.mustache

@ -1,48 +0,0 @@
{{!
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/>.
}}
{{!
@template core/columns-1to1to1
Moodle columns-1to1to1 template.
The purpose of this template is to render a template with 3 columns.
On mobile the columns stack underneath each other.
Classes required for JS:
* none
Data attributes required for JS:
* none
Context variables required for this template:
* col1content Column 1 contents.
* col2content Column 2 contents.
* col3content Column 3 contents.
Example context (json):
{
"col1content": "<div class='alert alert-error'>1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam pellentesque id urna sit amet tempor.</div>",
"col2content": "<div class='alert alert-success'>2. Donec lacus nisl, molestie eget sodales non, sodales et nibh. Praesent dignissim placerat sodales.</div>",
"col3content": "<div class='alert alert-info'>3. Praesent sit amet ante odio. In mollis nisl at mi bibendum venenatis.</div>"
}
}}
<div class="row">
<div class="col-md-4">{{$ column1 }}{{{ col1content }}}{{/ column1 }}</div>
<div class="col-md-4">{{$ column2 }}{{{ col2content }}}{{/ column2 }}</div>
<div class="col-md-4">{{$ column3 }}{{{ col3content }}}{{/ column3 }}</div>
</div>

45
templates/core/columns-1to2.mustache

@ -1,45 +0,0 @@
{{!
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/>.
}}
{{!
@template core/columns-1to2
Moodle columns-1to2 template.
The purpose of this template is to render 2 columns where the second column has twice the width of the first one.
On mobile the second column collapses underneath the first.
Classes required for JS:
* none
Data attributes required for JS:
* none
Context variables required for this template:
* col1content Column 1 contents.
* col2content Column 2 contents.
Example context (json):
{
"col1content": "<div class='alert alert-info'>1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In porttitor vulputate turpis, quis tempor arcu.</div>",
"col2content": "<div class='alert alert-success'>2. Vivamus ac orci in velit fringilla aliquam a a nisl. Cras luctus quam laoreet magna pulvinar aliquet.</div>"
}
}}
<div class="row">
<div class="col-md-4">{{$ column1 }}{{{ col1content }}}{{/ column1 }}</div>
<div class="col-md-8">{{$ column2 }}{{{ col2content }}}{{/ column2 }}</div>
</div>

44
templates/core/columns-2to1.mustache

@ -1,44 +0,0 @@
{{!
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/>.
}}
{{!
@template core/columns-2to1
Moodle columns-2to1 template.
The purpose of this template is to render 2 columns where the first column has twice the width of the second one.
On mobile the second column collapses underneath the first.
Classes required for JS:
* none
Data attributes required for JS:
* none
Context variables required for this template:
* col1content Column 1 contents.
* col2content Column 2 contents.
Example context (json):
{
"col1content": "<div class='alert alert-info'>1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In porttitor vulputate turpis, quis tempor arcu.</div>",
"col2content": "<div class='alert alert-success'>2. Vivamus ac orci in velit fringilla aliquam a a nisl. Cras luctus quam laoreet magna pulvinar aliquet.</div>"
}
}}
<div class="row">
<div class="col-md-8">{{$ column1 }}{{{ col1content }}}{{/ column1 }}</div>
<div class="col-md-4">{{$ column2 }}{{{ col2content }}}{{/ column2 }}</div>
</div>

24
templates/core/custom_menu_item.mustache

@ -1,24 +0,0 @@
{{^divider}}
{{#haschildren}}
<li class="dropdown nav-item">
<a class="dropdown-toggle nav-link" id="drop-down-{{uniqid}}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" href="#" aria-controls="drop-down-menu-{{uniqid}}">
{{{text}}}
</a>
<div class="dropdown-menu" role="menu" id="drop-down-menu-{{uniqid}}" aria-labelledby="drop-down-{{uniqid}}">
{{#children}}
{{^divider}}
<a class="dropdown-item" role="menuitem" href="{{{url}}}" {{#title}}title="{{{title}}}"{{/title}}>{{{text}}}</a>
{{/divider}}
{{#divider}}
<div class="dropdown-divider" role="presentation"></div>
{{/divider}}
{{/children}}
</div>
</li>
{{/haschildren}}
{{^haschildren}}
<li class="nav-item">
<a class="nav-item nav-link" href="{{{url}}}" {{#title}}title="{{{title}}}"{{/title}}>{{{text}}}</a>
</li>
{{/haschildren}}
{{/divider}}

55
templates/core/dataformat_selector.mustache

@ -1,55 +0,0 @@
{{!
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/>.
}}
{{!
@template core/dataformat_selector
Context variables required for this template:
* label
* base
* name
* params
* options
* sesskey
* submit
Example context (json):
{
"base": "http://example.org/",
"name": "test",
"value": "test",
"label": "Download table data as",
"params": false,
"options": [{"label": "CSV", "name": "csv"}, {"label": "Excel", "name": "excel"}],
"submit": "Download",
"sesskey": ""
}
}}
<form method="get" action="{{base}}" class="dataformatselector m-1">
<div class="form-inline text-xs-right">
<input type="hidden" name="sesskey" value="{{sesskey}}">
<label for="downloadtype_{{name}}" class="mr-1">{{label}}</label>
<select name="{{name}}" id="downloadtype_{{name}}" class="form-control">
{{#options}}
<option value="{{value}}">{{label}}</option>
{{/options}}
</select>
<button type="submit" class="btn btn-secondary">{{submit}}</button>
{{#params}}
<input type="hidden" name="{{name}}" value="{{value}}">
{{/params}}
</div>
</form>

5
templates/core/filemanager_confirmdialog.mustache

@ -1,5 +0,0 @@
<div class="filemanager fp-dlg">
<p class="fp-dlg-text"></p>
<button class="fp-dlg-butconfirm btn-primary btn">{{#str}}ok{{/str}}</button>
<button class="fp-dlg-butcancel btn-secondary btn">{{#str}}cancel{{/str}}</button>
</div>

4
templates/core/filemanager_default_searchform.mustache

@ -1,4 +0,0 @@
<div class="fp-def-search form-group">
<label class="sr-only">{{#str}}searchrepo, repository{{/str}}</label>
<input type="search" class="form-control" id="reposearch" name="s" placeholder="{{#str}}search, repository{{/str}}"/>
</div>

65
templates/core/filemanager_fileselect.mustache

@ -1,65 +0,0 @@
<div class="filemanager fp-select">
<div class="fp-select-loading">
{{#pix}}i/loading_small{{/pix}}
</div>
<form class="mform clearfix">
<div class="form-group mx-0">
<button class="fp-file-download btn btn-secondary">{{#str}}download{{/str}}</button>
<button class="fp-file-delete btn btn-secondary">{{#str}}delete{{/str}}</button>
<button class="fp-file-setmain btn btn-secondary">{{#str}}setmainfile, repository{{/str}}</button>
<span class="fp-file-setmain-help">{{{helpicon}}}</span>
<button class="fp-file-zip btn btn-secondary">{{#str}}zip, editor{{/str}}</button>
<button class="fp-file-unzip btn btn-secondary">{{#str}}unzip{{/str}}</button>
</div>
<div class="fp-saveas form-group row mx-0">
<label class="form-control-label col-4 px-0">{{#str}}name, repository{{/str}}</label>
<div class="col-8 form-inline"><input class="form-control" type="text"/></div>
</div>
<div class="fp-author form-group row mx-0">
<label class="form-control-label col-4 px-0">{{#str}}author, repository{{/str}}</label>
<div class="col-8 form-inline"><input class="form-control" type="text"/></div>
</div>
<div class="fp-license form-group row mx-0">
<label class="form-control-label col-4 px-0">{{#str}}chooselicense, repository{{/str}}</label>
<div class="col-8 form-inline pr-0">
<select class="custom-select form-control"></select>
</div>
</div>
<div class="fp-path form-group row mx-0">
<label class="form-control-label col-4 px-0">{{#str}}path, repository{{/str}}</label>
<div class="col-8 form-inline pr-0">
<select class="custom-select form-control"></select>
</div>
</div>
<div class="fp-original form-group row mx-0">
<label class="form-control-label col-4 px-0">{{#str}}original, repository{{/str}}</label>
<div class="col-8 form-inline">
<span class="fp-originloading">{{#pix}}i/loading_small{{/pix}} {{#str}}loading, repository{{/str}}</span><span class="fp-value"></span>
</div>
</div>
<div class="fp-reflist form-group row mx-0">
<label class="form-control-label col-4 px-0">{{#str}}referenceslist, repository{{/str}}</label>
<div class="col-8 form-inline">
<p class="fp-refcount"></p>
<span class="fp-reflistloading">{{#pix}}i/loading_small{{/pix}} {{#str}}loading, repository{{/str}}</span>
<ul class="fp-value"></ul>
</div>
</div>
<div class="fp-select-buttons form-group">
<button class="fp-file-update btn-primary btn">{{#str}}update{{/str}}</button>
<button class="fp-file-cancel btn-secondary btn">{{#str}}cancel{{/str}}</button>
</div>
</form>
<div class="fp-info clearfix">
<hr>
<p class="fp-thumbnail"></p>
<div class="fp-fileinfo">
<div class="fp-datemodified">{{#str}}lastmodified, repository{{/str}} <span class="fp-value"></span></div>
<div class="fp-datecreated">{{#str}}datecreated, repository{{/str}} <span class="fp-value"></span></div>
<div class="fp-size">{{#str}}size, repository{{/str}} <span class="fp-value"></span></div>
<div class="fp-dimensions">{{#str}}dimensions, repository{{/str}} <span class="fp-value"></span></div>
</div>
</div>
</div>

43
templates/core/filemanager_loginform.mustache

@ -1,43 +0,0 @@
{{!
@template core/filemanager_loginform
This template is actually a template which is then used by YUI JS to
generate the markup, so it doesn't make much sense on its own.
Example context (json): {}
}}
<div class="fp-login-form">
<div class="fp-content-center">
<form class="form">
<div class="fp-formset">
<div class="fp-login-popup form-group">
<div class="fp-popup">
<p class="mdl-align">
<button class="fp-login-popup-but btn-primary btn">{{#str}}login, repository{{/str}}</button>
</p>
</div>
</div>
<div class="fp-login-textarea form-group">
<textarea class="form-control"></textarea>
</div>
<div class="fp-login-select form-group">
<label class="form-control-label"></label>
<select class="custom-select"></select>
</div>
<div class="fp-login-input form-group">
<label class="form-control-label"></label>
<input class="form-control"/>
</div>
<div class="fp-login-radiogroup form-group">
<label class="form-control-label"></label>
<div class="fp-login-radio"><input class="form-control" /> <label></label></div>
</div>
<div class="fp-login-checkbox form-group form-inline">
<label class="form-control-label"></label>
<input class="form-control"/>
</div>
</div>
<p class="mdl-align"><button class="fp-login-submit btn-primary btn">{{#str}}submit, repository{{/str}}</button></p>
</form>
</div>
</div>

63
templates/core/filemanager_modal_generallayout.mustache

@ -1,63 +0,0 @@
<div class="container">
<div tabindex="0" class="file-picker fp-generallayout row" role="dialog" aria-live="assertive">
<div class="fp-repo-area col-md-3 pr-2 nav nav-pills flex-column" role="tablist">
<div class="fp-repo nav-item" role="tab" aria-selected="false" tabindex="-1">
<a href="#" class="nav-link" tabindex="-1"><img class="fp-repo-icon" alt=" " src="#" width="16" height="16" />&nbsp;<span class="fp-repo-name"></span></a>
</div>
</div>
<div class="col-md-9 p-0">
<div class="fp-repo-items" tabindex="0">
<div class="fp-navbar bg-faded card mb-0 clearfix icon-no-spacing">
<div>
<div class="fp-toolbar">
<div class="fp-tb-back">
<a href="#" class="btn btn-secondary btn-sm">{{#str}}back, repository{{/str}}</a>
</div>
<div class="fp-tb-search">
<form></form>
</div>
<div class="fp-tb-refresh">
<a title="{{#str}}refresh, repository{{/str}}" class="btn btn-secondary btn-sm" href="#">
{{#pix}}a/refresh{{/pix}}
</a>
</div>
<div class="fp-tb-logout">
<a title="{{#str}}logout, repository{{/str}}" class="btn btn-secondary btn-sm" href="#">
{{#pix}}a/logout{{/pix}}
</a>
</div>
<div class="fp-tb-manage">
<a title="{{#str}}manageurl, repository{{/str}}" class="btn btn-secondary btn-sm" href="#">
{{#pix}}a/setting{{/pix}}
</a>
</div>
<div class="fp-tb-help">
<a title="{{#str}}help, repository{{/str}}" class="btn btn-secondary btn-sm" href="#">
{{#pix}}a/help{{/pix}}
</a>
</div>
<div class="fp-tb-message"></div>
</div>
<div class="fp-viewbar btn-group float-sm-right">
<a role="button" title="{{#str}}displayicons, repository{{/str}}" class="fp-vb-icons btn btn-secondary btn-sm" href="#">
{{#pix}}fp/view_icon_active, theme{{/pix}}
</a>
<a role="button" title="{{#str}}displaydetails, repository{{/str}}" class="fp-vb-details btn btn-secondary btn-sm" href="#">
{{#pix}}fp/view_list_active, theme{{/pix}}
</a>
<a role="button" title="{{#str}}displaytree, repository{{/str}}" class="fp-vb-tree btn btn-secondary btn-sm" href="#">
{{#pix}}fp/view_tree_active, theme{{/pix}}
</a>
</div>
<div class="fp-clear-left"></div>
</div>
<div class="fp-pathbar">
<span class="fp-path-folder"><a class="fp-path-folder-name" href="#"></a></span>
</div>
</div>
<div class="fp-content card"></div>
</div>
</div>
</div>
</div>

58
templates/core/filemanager_page_generallayout.mustache

@ -1,58 +0,0 @@
<div id="filemanager-{{{client_id}}}" class="filemanager w-100 fm-loading">
<div class="fp-restrictions">
{{{restrictions}}}
<span class="dnduploadnotsupported-message"> - {{#str}}dndnotsupported_insentence{{/str}}{{{helpicon}}}</span>
</div>
<div class="fp-navbar bg-faded card mb-0">
<div class="filemanager-toolbar icon-no-spacing">
<div class="fp-toolbar">
<div class="fp-btn-add">
<a role="button" title="{{#str}}addfile, repository{{/str}}" class="btn btn-secondary btn-sm" href="#">
{{#pix}}a/add_file{{/pix}}
</a>
</div>
<div class="fp-btn-mkdir">
<a role="button" title="{{#str}}makeafolder{{/str}}" class="btn btn-secondary btn-sm" href="#">
{{#pix}}a/create_folder{{/pix}}
</a>
</div>
<div class="fp-btn-download">
<a role="button" title="{{#str}}downloadfolder, repository{{/str}}" class="btn btn-secondary btn-sm" href="#">
{{#pix}}a/download_all{{/pix}}
</a>
</div>
<span class="fp-img-downloading">
<span class="sr-only">{{#str}}loadinghelp{{/str}}</span>
{{#pix}}i/loading_small{{/pix}}
</span>
</div>
<div class="fp-viewbar btn-group float-sm-right">
<a title="{{#str}}displayicons, repository{{/str}}" class="fp-vb-icons btn btn-secondary btn-sm" href="#">
{{#pix}}fp/view_icon_active, theme{{/pix}}
</a>
<a title="{{#str}}displaydetails, repository{{/str}}" class="fp-vb-details btn btn-secondary btn-sm" href="#">
{{#pix}}fp/view_list_active, theme{{/pix}}
</a>
<a title="{{#str}}displaytree, repository{{/str}}" class="fp-vb-tree btn btn-secondary btn-sm" href="#">
{{#pix}}fp/view_tree_active, theme{{/pix}}
</a>
</div>
</div>
<div class="fp-pathbar">
<span class="fp-path-folder"><a class="fp-path-folder-name" href="#"></a></span>
</div>
</div>
<div class="filemanager-loading mdl-align">{{#pix}}i/loading_small{{/pix}}<span class="sr-only">{{#str}}loadinghelp{{/str}}</span></div>
<div class="filemanager-container card" >
<div class="fm-content-wrapper">
<div class="fp-content"></div>
<div class="fm-empty-container">
<div class="dndupload-message">{{#str}}dndenabled_inbox{{/str}}<br/><div class="dndupload-arrow"></div></div>
</div>
<div class="dndupload-target">{{#str}}droptoupload{{/str}}<br/><div class="dndupload-arrow"></div></div>
<div class="dndupload-progressbars"></div>
<div class="dndupload-uploadinprogress">{{#pix}}i/loading_small{{/pix}}<span class="sr-only">{{#str}}loadinghelp{{/str}}</span></div>
</div>
<div class="filemanager-updating">{{#pix}}i/loading_small{{/pix}}<span class="sr-only">{{#str}}loadinghelp{{/str}}</span></div>
</div>
</div>

8
templates/core/filemanager_processexistingfile.mustache

@ -1,8 +0,0 @@
<div class="file-picker fp-dlg">
<p class="fp-dlg-text"></p>
<div class="fp-dlg-buttons">
<button class="fp-dlg-butoverwrite btn btn-primary">{{#str}}overwrite, repository{{/str}}</button>
<button class="fp-dlg-butrename btn btn-primary"></button>
<button class="fp-dlg-butcancel btn btn-secondary">{{#str}}cancel{{/str}}</button>
</div>
</div>

9
templates/core/filemanager_processexistingfilemultiple.mustache

@ -1,9 +0,0 @@
<div class="file-picker fp-dlg">
<p class="fp-dlg-text"></p>
<a class="fp-dlg-butoverwrite btn btn-primary" href="#">{{#str}}overwrite, repository{{/str}}</a>
<a class="fp-dlg-butrename btn btn-primary" href="#"></a>
<a class="fp-dlg-butcancel btn btn-secondary" href="#">{{#str}}cancel{{/str}}</a>
<br/>
<a class="fp-dlg-butoverwriteall btn btn-primary" href="#">{{#str}}overwriteall, repository{{/str}}</a>
<a class="fp-dlg-butrenameall btn btn-primary" href="#">{{#str}}renameall, repository{{/str}}</a>
</div>

66
templates/core/filemanager_selectlayout.mustache

@ -1,66 +0,0 @@
<div class="file-picker fp-select">
<div class="fp-select-loading">
<span class="sr-only">{{#str}}loadinghelp{{/str}}</span>
{{#pix}}i/loading_small{{/pix}}
</div>
<div class="container">
<form>
<fieldset class="form-group row">
<div class="form-check fp-linktype-2">
<label class="form-check-label">
<input class="form-check-input" type="radio">
{{#str}}makefileinternal, repository{{/str}}
</label>
</div>
<div class="form-check fp-linktype-1">
<label class="form-check-label">
<input class="form-check-input" type="radio">
{{#str}}makefilelink, repository{{/str}}
</label>
</div>
<div class="form-check fp-linktype-4">
<label class="form-check-label">
<input class="form-check-input" type="radio">
{{#str}}makefilereference, repository{{/str}}
</label>
</div>
<div class="form-check fp-linktype-8">
<label class="form-check-label">
<input class="form-check-input" type="radio">
{{#str}}makefilecontrolledlink, repository{{/str}}
</label>
</div>
</fieldset>
<div class="fp-saveas form-group row">
<label class="col-form-label">{{#str}}saveas, repository{{/str}}</label>
<input class="form-control" type="text">
</div>
<div class="fp-setauthor form-group row">
<label class="col-form-label">{{#str}}author, repository{{/str}}</label>
<input class="form-control" type="text">
</div>
<div class="fp-setlicense form-group row">
<label class="col-form-label">{{#str}}chooselicense, repository{{/str}}</label>
<select class="custom-select"></select>
</div>
<div class="form-group row">
<div class="fp-select-buttons">
<button class="fp-select-confirm btn-primary btn">{{#str}}getfile, repository{{/str}}</button>
<button class="fp-select-cancel btn-secondary btn">{{#str}}cancel{{/str}}</button>
</div>
</div>
</form>
</div>
<div class="fp-info clearfix">
<hr>
<p class="fp-thumbnail"></p>
<div class="fp-fileinfo">
<div class="fp-datemodified">{{#str}}lastmodified, repository{{/str}}<span class="fp-value"></span></div>
<div class="fp-datecreated">{{#str}}datecreated, repository{{/str}}<span class="fp-value"></span></div>
<div class="fp-size">{{#str}}size, repository{{/str}}<span class="fp-value"></span></div>
<div class="fp-license">{{#str}}license, repository{{/str}}<span class="fp-value"></span></div>
<div class="fp-author">{{#str}}author, repository{{/str}}<span class="fp-value"></span></div>
<div class="fp-dimensions">{{#str}}dimensions, repository{{/str}}<span class="fp-value" dir="ltr"></span></div>
</div>
</div>
</div>

29
templates/core/filemanager_uploadform.mustache

@ -1,29 +0,0 @@
<div class="fp-upload-form">
<div class="fp-content-center">
<form enctype="multipart/form-data" method="POST" class="form">
<div class="fp-formset">
<div class="fp-file form-group">
<label>{{#str}}attachment, repository{{/str}}</label>
<div class="p-x-1">
<input type="file"/>
</div>
</div>
<div class="fp-saveas form-group">
<label>{{#str}}saveas, repository{{/str}}</label>
<input type="text" class="form-control"/>
</div>
<div class="fp-setauthor form-group">
<label>{{#str}}author, repository{{/str}}</label>
<input type="text" class="form-control"/>
</div>
<div class="fp-setlicense control-group">
<label>{{#str}}chooselicense, repository{{/str}}</label>
<select class="custom-select"></select>
</div>
</div>
</form>
<div class="mdl-align">
<button class="fp-upload-btn btn-primary btn">{{#str}}upload, repository{{/str}}</button>
</div>
</div>
</div>

53
templates/core/form_autocomplete_input.mustache

@ -1,53 +0,0 @@
{{!
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/>.
}}
{{!
@template core/form_autocomplete_input
Moodle template for the input field in an autocomplate form element.
Classes required for JS:
* none
Data attributes required for JS:
* none
Context variables required for this template:
* inputId The dom id of this input field.
* suggestionsId The dom id of the suggestions list.
* selectionId The dom id of the current selection list.
* downArrowId The dom id of the down arrow to open the suggestions.
* placeholder The place holder text when the field is empty
Example context (json):
{ "inputID": 1, "suggestionsId": 2, "selectionId": 3, "downArrowId": 4, "placeholder": "Select something" }
}}
{{#showSuggestions}}
<input type="text" id="{{inputId}}" class="form-control" list="{{suggestionsId}}" placeholder="{{placeholder}}" role="combobox" aria-expanded="false" autocomplete="off" autocorrect="off" autocapitalize="off" aria-autocomplete="list" aria-owns="{{suggestionsId}} {{selectionId}}" {{#tags}}data-tags="1"{{/tags}}/><span class="form-autocomplete-downarrow" id="{{downArrowId}}">&#x25BC;</span>
{{/showSuggestions}}
{{^showSuggestions}}
<input type="text" id="{{inputId}}" placeholder="{{placeholder}}" role="textbox" aria-owns="{{selectionId}}" {{#tags}}data-tags="1"{{/tags}}/>
{{/showSuggestions}}
{{#js}}
require(['jquery'], function($) {
// Set the minimum width of the input so that the placeholder is whole displayed.
var inputElement = $(document.getElementById('{{inputId}}'));
if (inputElement.length) {
inputElement.css('min-width', inputElement.attr('placeholder').length + 'ch');
}
});
{{/js}}

50
templates/core/form_autocomplete_selection.mustache

@ -1,50 +0,0 @@
{{!
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/>.
}}
{{!
@template core/form_autocomplete_selection
Moodle template for the currently selected items in an autocomplate form element.
Classes required for JS:
* none
Data attributes required for JS:
* none
Context variables required for this template:
* multiple True if this field allows multiple selections
* selectionId The dom id of the current selection list.
* items List of items with label and value fields.
* noSelectionString String to use when no items are selected
Example context (json):
{ "multiple": true, "selectionId": 1, "items": [
{ "label": "Item label with <strong>tags</strong>", "value": "5" },
{ "label": "Another item label with <strong>tags</strong>", "value": "4" }
], "noSelectionString": "No selection" }
}}
<div class="form-autocomplete-selection w-100 {{#multiple}}form-autocomplete-multiple{{/multiple}}" id="{{selectionId}}" role="list" aria-atomic="true" {{#multiple}}tabindex="0" aria-multiselectable="true"{{/multiple}}>
<span class="accesshide">{{#str}}selecteditems, form{{/str}}</span>
{{#items}}
<span role="listitem" data-value="{{value}}" aria-selected="true" class="tag tag-info mb-3 mr-1" style="font-size: 100%">
{{#multiple}}<span aria-hidden="true">× </span>{{/multiple}}{{{label}}}
</span>
{{/items}}
{{^items}}
<span class="mb-3 mr-1">{{noSelectionString}}</span>
{{/items}}
</div>

25
templates/core/help_icon.mustache

@ -1,25 +0,0 @@
{{!
@template core/help_icon
Help icon.
Example context (json):
{
"title": "Help with something",
"url": "http://example.org/help",
"linktext": "",
"icon":{
"attributes": [
{"name": "class", "value": "iconhelp"},
{"name": "src", "value": "../../../pix/help.svg"},
{"name": "alt", "value": "Help icon"}
]
}
}
}}
<a class="btn btn-link p-0" role="button"
data-container="body" data-toggle="popover"
data-placement="{{#ltr}}right{{/ltr}}{{^ltr}}left{{/ltr}}" data-content="{{text}} {{completedoclink}}"
data-html="true" tabindex="0" data-trigger="focus">
{{#pix}}help, core, {{{alt}}}{{/pix}}
</a>

106
templates/core/initials_bar.mustache

@ -1,106 +0,0 @@
{{!
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/>.
}}
{{!
@template core/initials_bar
Initials bar.
Example context (json):
{
"title": "First name",
"class": "firstinitial",
"current": "A",
"url": "http://moodle.generic32/report/progress/index.php?course=2&sifirst",
"all": "All",
"group": [
{
"letter": [
{
"name": "A",
"url": "http://moodle.generic32/report/progress/index.php?course=2&sifirst=A"
},
{
"name": "B",
"url": "http://moodle.generic32/report/progress/index.php?course=2&sifirst=B"
},
{
"name": "C",
"url": "http://moodle.generic32/report/progress/index.php?course=2&sifirst=C"
},
{
"name": "D",
"url": "http://moodle.generic32/report/progress/index.php?course=2&sifirst=D"
}
]
},
{
"letter": [
{
"name": "W",
"url": "http://moodle.generic32/report/progress/index.php?course=2&sifirst=W",
"selected": "W"
},
{
"name": "X",
"url": "http://moodle.generic32/report/progress/index.php?course=2&sifirst=X"
},
{
"name": "Y",
"url": "http://moodle.generic32/report/progress/index.php?course=2&sifirst=Y"
},
{
"name": "Z",
"url": "http://moodle.generic32/report/progress/index.php?course=2&sifirst=Z"
}
]
}
]
}
}}
<div class="initialbar {{class}} d-flex flex-wrap justify-content-center justify-content-md-start">
<span class="initialbarlabel mr-2">{{title}}</span>
<div class="initialbargroups d-flex flex-wrap justify-content-center justify-content-md-start">
<ul class="pagination pagination-sm">
{{#current}}
<li class="initialbarall page-item">
<a class="page-link" href="{{url}}">{{all}}</a>
</li>
{{/current}}
{{^current}}
<li class="initialbarall page-item active">
<a class="page-link">{{all}}</a>
</li>
{{/current}}
</ul>
{{#group}}
<ul class="pagination pagination-sm">
{{#letter}}
{{#selected}}
<li class="page-item active {{name}}"><span class="page-link">{{name}}</span></li>
{{/selected}}
{{^selected}}
<li class="page-item {{name}}"><a class="page-link" href="{{url}}">{{name}}</a></li>
{{/selected}}
{{/letter}}
</ul>
{{/group}}
</div>
</div>

244
templates/core/loginform.mustache

@ -1,244 +0,0 @@
{{!
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/>.
}}
{{!
@template core/loginform
Moodle template for the login page.
Context variables required for this template:
* autofocusform: Auto focus on form ?,
* canloginasguest - Is guest login allowed?,
* canloginbyemail - Is login by email allowed?,
* cansignup - Signup allowed?,
* cookieshelpicon - cookies help icon details
* error - Any errors in the form?,
* forgotpasswordurl - Forgot password url,
* hasidentityproviders - Flag, set to true to hide identity providers,
* hasinstructions - Flag, set to true to show instructions,
* identityproviders - List of identiy providers,
* instructions - Instructions,
* instructionsformat - Format of instructions,
* loginurl - Login url,
* rememberusername - Remeber username?,
* signupurl - Signup url,
* cookieshelpiconformatted - Formatted html of cookies help icon,
* errorformatted - Formatted error,
* logourl - Flag, logo url,
* sitename - Name of site.
* logintoken - Random token to protect login request.
Example context (json):
{
"autofocusform": false,
"canloginasguest": "1",
"canloginbyemail": false,
"cansignup": true,
"cookieshelpicon": {
"heading": "Cookies must be enabled in your browser",
"text": "<div class=\"no-overflow\">Two cookies are used on this site. Both died..</div>",
"icon": {
"attributes": [
{
"name": "class",
"value": "iconhelp"
},
{
"name": "alt",
"value": "Help with Cookies must be enabled in your browser"
},
{
"name": "title",
"value": "Help with Cookies must be enabled in your browser"
},
{
"name": "src",
"value": "http://localhost/stable_master/theme/image.php?theme=ilb&component=core&image=help"
}
]
},
"linktext": null,
"title": "Help with Cookies must be enabled in your browser",
"url": "http://localhost/stable_master/help.php?component=core&identifier=cookiesenabled&lang=en",
"ltr": true
},
"error": "",
"forgotpasswordurl": "http://localhost/stable_master/login/forgot_password.php",
"hasidentityproviders": false,
"hasinstructions": true,
"identityproviders": [],
"instructions": "For full access to this site, you first need to create an account.",
"instructionsformat": "1",
"loginurl": "http://localhost/stable_master/login/index.php",
"rememberusername": true,
"signupurl": "http://localhost/stable_master/login/signup.php",
"cookieshelpiconformatted": "",
"errorformatted": "",
"logourl": false,
"sitename": "Beer & Chips",
"logintoken": "randomstring"
}
}}
<div class="my-1 my-sm-5"></div>
<div class="row justify-content-center">
<div class="col-xl-6 col-sm-8 ">
<div class="card">
<div class="card-block">
{{#logourl}}
<h2 class="card-header text-center" ><img src="{{logourl}}" class="img-fluid" title="{{sitename}}" alt="{{sitename}}"/></h2>
{{/logourl}}
{{^logourl}}
<h2 class="card-header text-center">{{sitename}}</h2>
{{/logourl}}
<div class="card-body">
{{#cansignup}}
<div class="sr-only">
<a href="{{signupurl}}">{{#str}} tocreatenewaccount {{/str}}</a>
</div>
{{/cansignup}}
{{#error}}
<div class="loginerrors mt-3">
<a href="#" id="loginerrormessage" class="accesshide">{{error}}</a>
<div class="alert alert-danger" role="alert" data-aria-autofocus="true">{{error}}</div>
</div>
{{/error}}
<div class="row justify-content-md-center">
<div class="col-md-5">
<form class="mt-3" action="{{loginurl}}" method="post" id="login">
<input id="anchor" type="hidden" name="anchor" value="">
<script>document.getElementById('anchor').value = location.hash;</script>
<input type="hidden" name="logintoken" value="{{logintoken}}">
<div class="form-group">
<label for="username" class="sr-only">
{{^canloginbyemail}}
{{#str}} username {{/str}}
{{/canloginbyemail}}
{{#canloginbyemail}}
{{#str}} usernameemail {{/str}}
{{/canloginbyemail}}
</label>
<input type="text" name="username" id="username"
class="form-control"
value="{{username}}"
placeholder={{#quote}}{{^canloginbyemail}}{{#str}}username{{/str}}{{/canloginbyemail}}{{#canloginbyemail}}{{#str}}usernameemail{{/str}}{{/canloginbyemail}}{{/quote}}
autocomplete="username">
</div>
<div class="form-group">
<label for="password" class="sr-only">{{#str}} password {{/str}}</label>
<input type="password" name="password" id="password" value=""
class="form-control"
placeholder={{#quote}}{{#str}}password{{/str}}{{/quote}}
autocomplete="current-password">
</div>
{{#rememberusername}}
<div class="rememberpass mt-3">
<input type="checkbox" name="rememberusername" id="rememberusername" value="1" {{#username}}checked="checked"{{/username}} />
<label for="rememberusername">{{#str}} rememberusername, admin {{/str}}</label>
</div>
{{/rememberusername}}
<button type="submit" class="btn btn-primary btn-block mt-3" id="loginbtn">{{#str}}login{{/str}}</button>
</form>
</div>
<div class="col-md-5">
<div class="forgetpass mt-3">
<p><a href="{{forgotpasswordurl}}">{{#str}}forgotten{{/str}}</a></p>
</div>
<div class="mt-3">
{{#str}} cookiesenabled {{/str}}
{{{cookieshelpiconformatted}}}
</div>
{{#canloginasguest}}
<div class="mt-2">
<p>{{#str}}someallowguest{{/str}}</p>
<form action="{{loginurl}}" method="post" id="guestlogin">
<input type="hidden" name="logintoken" value="{{logintoken}}">
<input type="hidden" name="username" value="guest" />
<input type="hidden" name="password" value="guest" />
<button class="btn btn-secondary btn-block" type="submit">{{#str}}loginguest{{/str}}</button>
</form>
</div>
{{/canloginasguest}}
{{#hasidentityproviders}}
<h6 class="mt-2">{{#str}} potentialidps, auth {{/str}}</h6>
<div class="potentialidplist" class="mt-3">
{{#identityproviders}}
<div class="potentialidp">
<a href="{{url}}" title={{#quote}}{{name}}{{/quote}} class="btn btn-secondary btn-block">
{{#iconurl}}
<img src="{{iconurl}}" alt="" width="24" height="24"/>
{{/iconurl}}
{{name}}
</a>
</div>
{{/identityproviders}}
</div>
{{/hasidentityproviders}}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{{#hasinstructions}}
<div class="row justify-content-center mt-3">
<div class="col-xl-6 col-sm-8">
<div class="card">
<div class="card-body">
<div class="card-title">
<h2>{{#str}}firsttime{{/str}}</h2>
</div>
<div>
{{{instructions}}}
{{#cansignup}}
<form class="mt-3" action="{{signupurl}}" method="get" id="signup">
<button type="submit" class="btn btn-secondary">{{#str}}startsignup{{/str}}</button>
</form>
{{/cansignup}}
</div>
</div>
</div>
</div>
</div>
{{/hasinstructions}}
{{#js}}
{{#error}}
require(['jquery'], function($) {
$('#loginerrormessage').focus();
});
{{/error}}
{{^error}}
{{#autofocusform}}
require(['jquery'], function($) {
if ($('#username').val()) {
$('#password').focus();
} else {
$('#username').focus();
}
});
{{/autofocusform}}
{{/error}}
{{/js}}

67
templates/core/modal.mustache

@ -1,67 +0,0 @@
{{!
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/>.
}}
{{!
@template core/modal
Moodle modal template.
The purpose of this template is to render a modal
Classes required for JS:
* none
Data attributes required for JS:
* none
Context variables required for this template:
* title A cleaned string (use clean_text()) to display.
* body HTML content for the boday
* footer HTML content for the footer
Example context (json):
{
"title": "Example modal",
"body": "Some example content for the body",
"footer": "Footer text, right here!"
}
}}
<div class="modal moodle-has-zindex" data-region="modal-container" aria-hidden="true" role="dialog">
<div class="modal-dialog {{$classes}}{{/classes}}" role="document" data-region="modal" aria-labelledby="{{uniqid}}-modal-title" tabindex="0">
<div class="modal-content">
<div class="modal-header {{$headerclasses}}{{headerclasses}}{{/headerclasses}}" data-region="header">
{{$header}}
<h5 id="{{uniqid}}-modal-title" class="modal-title" data-region="title">{{$title}}{{title}}{{/title}}</h5>
{{/header}}
<button type="button" class="close" data-action="hide" aria-label={{#quote}}{{#str}}closebuttontitle{{/str}}{{/quote}}>
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" data-region="body">
{{$body}}
{{{body}}}
{{/body}}
</div>
<div class="modal-footer" data-region="footer">
{{$footer}}
{{{footer}}}
{{/footer}}
</div>
</div>
</div>
</div>

36
templates/core/modal_backdrop.mustache

@ -1,36 +0,0 @@
{{!
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/>.
}}
{{!
@template core/modal_backdrop
Moodle modal backdrop template.
The purpose of this template is to render a modal
Classes required for JS:
* none
Data attributes required for JS:
* none
Context variables required for this template:
* none
Example context (json):
{}
}}
<div class="modal-backdrop in hide" aria-hidden="true" data-region="modal-backdrop"></div>

79
templates/core/navbar.mustache

@ -1,79 +0,0 @@
{{!
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/>.
}}
{{!
@template core/navbar
Navbar template.
Classes required for JS:
* none
Data attributes required for JS:
* none
Context variables required for this template:
* get_items - array of items
* has_action - boolean
* action - string
* get_title - string
* get_content - string
* is_hidden - boolean
Example context (json):
{
"get_items": [
{
"has_action": true,
"action": "#",
"get_title": "Test title",
"get_content": "First & fresh",
"is_hidden": false
},
{
"has_action": true,
"action": "#",
"get_title": "Second item & a title",
"get_content": "Second item",
"is_hidden": false
},
{
"has_action": false,
"get_content": "Third item",
"is_hidden": false
},
{
"has_action": false,
"get_content": "Fourth & last",
"is_hidden": true
}
]
}
}}
<nav role="navigation" aria-label="{{#str}}breadcrumb, access{{/str}}">
<ol class="breadcrumb">
{{#get_items}}
{{#has_action}}
<li class="breadcrumb-item{{#is_hidden}} dimmed_text{{/is_hidden}}">
<a href="{{{action}}}" {{#is_last}}aria-current="page"{{/is_last}} {{#get_title}}title="{{get_title}}"{{/get_title}}>{{{get_content}}}</a>
</li>
{{/has_action}}
{{^has_action}}
<li class="breadcrumb-item{{#is_hidden}} dimmed_text{{/is_hidden}}">{{{text}}}</li>
{{/has_action}}
{{/get_items}}
</ol>
</nav>

44
templates/core/notification_error.mustache

@ -1,44 +0,0 @@
{{!
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/>.
}}
{{!
@template core/notification_error
Moodle notification template.
The purpose of this template is to render an error notification.
Classes required for JS:
* none
Data attributes required for JS:
* none
Context variables required for this template:
* message A cleaned string (use clean_text()) to display.
* extraclasses Additional classes to apply to the notification.
* closebutton Whether a close button should be displayed to dismiss the message.
* announce Whether the notification should be announced to screen readers.
Example context (json):
{ "message": "Your pants are on fire!", "closebutton": 1, "announce": 1, "extraclasses": "foo bar"}
}}
<div class="alert alert-danger alert-block fade in {{ extraclasses }}" {{!
}}{{# announce }} role="alert" data-aria-autofocus="true"{{/ announce }}{{!
}}>
{{# closebutton }}<button type="button" class="close" data-dismiss="alert">&times;</button>{{/ closebutton }}
{{{ message }}}
</div>

45
templates/core/notification_info.mustache

@ -1,45 +0,0 @@
{{!
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/>.
}}
{{!
@template core/notification_info
Moodle notification template.
The purpose of this template is to render an info notification.
Classes required for JS:
* none
Data attributes required for JS:
* none
Context variables required for this template:
* message A cleaned string (use clean_text()) to display.
* extraclasses Additional classes to apply to the notification.
* closebutton Whether a close button should be displayed to dismiss the message.
* announce Whether the notification should be announced to screen readers.
Example context (json):
{ "message": "Your pants are on fire!", "closebutton": 1, "announce": 1, "extraclasses": "foo bar"}
}}
<div class="alert alert-info alert-block fade in {{ extraclasses }}" {{!
}}{{# announce }} role="alert" data-aria-autofocus="true"{{/ announce }}{{!
}}>
{{# closebutton }}<button type="button" class="close" data-dismiss="alert">&times;</button>{{/ closebutton }}
{{{ message }}}
</div>

44
templates/core/notification_success.mustache

@ -1,44 +0,0 @@
{{!
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/>.
}}
{{!
@template core/notification_success
Moodle notification template.
The purpose of this template is to render a success notification.
Classes required for JS:
* none
Data attributes required for JS:
* none
Context variables required for this template:
* message A cleaned string (use clean_text()) to display.
* extraclasses Additional classes to apply to the notification.
* closebutton Whether a close button should be displayed to dismiss the message.
* announce Whether the notification should be announced to screen readers.
Example context (json):
{ "message": "Your pants are on fire!", "closebutton": 1, "announce": 1, "extraclasses": "foo bar"}
}}
<div class="alert alert-success alert-block fade in {{ extraclasses }}" {{!
}}{{# announce }} role="alert" data-aria-autofocus="true"{{/ announce }}{{!
}}>
{{# closebutton }}<button type="button" class="close" data-dismiss="alert">&times;</button>{{/ closebutton }}
{{{ message }}}
</div>

44
templates/core/notification_warning.mustache

@ -1,44 +0,0 @@
{{!
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/>.
}}
{{!
@template core/notification_warning
Moodle notification template.
The purpose of this template is to render a warning notification.
Classes required for JS:
* none
Data attributes required for JS:
* none
Context variables required for this template:
* message A cleaned string (use clean_text()) to display.
* extraclasses Additional classes to apply to the notification.
* closebutton Whether a close button should be displayed to dismiss the message.
* announce Whether the notification should be announced to screen readers.
Example context (json):
{ "message": "Your pants are on fire!", "closebutton": 1, "announce": 1, "extraclasses": "foo bar"}
}}
<div class="alert alert-warning alert-block fade in {{ extraclasses }}" {{!
}}{{# announce }} role="alert" data-aria-autofocus="true"{{/ announce }}{{!
}}>
{{# closebutton }}<button type="button" class="close" data-dismiss="alert">&times;</button>{{/ closebutton }}
{{{ message }}}
</div>

17
templates/core/preferences_groups.mustache

@ -1,17 +0,0 @@
<div class="row">
{{#groups}}
<div class="col-md-4">
<div class="card mb-3">
<div class="card-body">
<h4 class="card-title">{{title}}</h4>
<div class="card-text">
{{#nodes}}
<div><a {{#get_title}}title="{{get_title}}"{{/get_title}} href="{{{action}}}">{{get_content}}</a></div>
{{/nodes}}
</div>
</div>
</div>
</div>
{{/groups}}
</div>

64
templates/core/progress_bar.mustache

@ -1,64 +0,0 @@
{{!
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/>.
}}
{{!
@template core/progress_bar
Progress bar.
Example context (json):
{
"id": "progressbar_test",
"width": "500"
}
}}
<div id="{{id}}" class="row progressbar_container">
<div class="col-md-6 push-md-3">
<p id="{{id}}_status" class="text-xs-center"></p>
<progress id="{{id}}_bar" class="progress progress-striped progress-animated" value="0" max="100"></progress>
<p id="{{id}}_estimate" class="text-xs-center"></p>
</div>
</div>
{{! We must not use the JS helper otherwise this gets executed too late. }}
<script type="text/javascript">
(function() {
var el = document.getElementById('{{id}}'),
progressBar = document.getElementById('{{id}}_bar'),
statusIndicator = document.getElementById('{{id}}_status'),
estimateIndicator = document.getElementById('{{id}}_estimate');
el.addEventListener('update', function(e) {
var msg = e.detail.message,
percent = e.detail.percent,
estimate = e.detail.estimate;
statusIndicator.textContent = msg;
progressBar.setAttribute('value', Math.round(percent));
if (percent === 100) {
progressBar.classList.add('progress-success');
estimateIndicator.textContent = '100%';
} else {
if (estimate) {
estimateIndicator.textContent = estimate + ' - ' + percent + '%';
} else {
estimateIndicator.textContent = '' + percent + '%';
}
progressBar.classList.remove('progress-success');
}
});
})();
</script>

38
templates/core/select_time.mustache

@ -1,38 +0,0 @@
{{!
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/>.
}}
{{!
@template core/select_time
Select time.
Example context (json):
{
"id": "test-id",
"name": "test-name",
"label": "Test label",
"options": [
{"name": "Option 1", "value": "1"},
{"name": "Option 2", "value": "2"}
]
}
}}
<label for="{{id}}" class="sr-only">{{label}}</label>
<select name="{{name}}" id="{{id}}"{{#attributes}} {{name}}="{{value}}"{{/attributes}} class="form-control">
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}
</select>

147
templates/core/settings_link_page.mustache

@ -1,147 +0,0 @@
{{!
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/>.
}}
{{!
@template core/settings_link_page
Displays the admin tree as a list of grouped links.
Example context (json):
{
"node": {
"text": "Root of menu",
"key": "test0",
"display": true,
"children": [
{
"text": "Child of menu",
"key": "test1",
"display": true,
"children": []
}
]
}
}
}}
<ul class="nav nav-tabs" role="tablist">
<!-- First the top most node and immediate children -->
<li class="nav-item">
<a class="nav-link active" href="#link{{node.key}}" data-toggle="tab" role="tab">{{node.text}}</a>
</li>
<!-- Now the first level children with sub nodes -->
{{#node.children}}
{{#children.count}}
{{#display}}
{{^is_short_branch}}
<li class="nav-item">
<a class="nav-link" href="#link{{key}}" data-toggle="tab" role="tab">{{text}}</a>
</li>
{{/is_short_branch}}
{{/display}}
{{/children.count}}
{{/node.children}}
</ul>
<div class="tab-content mt-3">
<div class="tab-pane active" id="link{{node.key}}" role="tabpanel">
<div class="container">
<div class="row">
<div class="col-sm-3">
</div>
<div class="col">
<ul class="list-unstyled">
{{#node.children}}
{{^children.count}}
{{#display}}
<li><a href="{{{action}}}">{{text}}</a></li>
{{/display}}
{{/children.count}}
{{/node.children}}
</ul>
</div>
</div>
{{#node.children}}
{{#display}}
{{#children.count}}
{{#is_short_branch}}
<hr>
<div class="row">
<div class="col-sm-3">
{{#action}}<h4><a href="{{action}}">{{text}}</a><h4>{{/action}}
{{^action}}<h4>{{text}}<h4>{{/action}}
</div>
<div class="col">
<ul class="list-unstyled">
{{#children}}
{{> core/settings_link_page_single }}
{{/children}}
</ul>
</div>
</div>
{{/is_short_branch}}
{{/children.count}}
{{/display}}
{{/node.children}}
</div>
</div>
{{#node.children}}
{{#children.count}}
<div class="tab-pane" id="link{{key}}" role="tabpanel">
<div class="container">
<div class="row">
<div class="col-sm-3">
{{#action}}<h4><a href="{{action}}">{{text}}</a><h4>{{/action}}
{{^action}}<h4>{{text}}<h4>{{/action}}
</div>
<div class="col-sm-9">
<ul class="list-unstyled">
{{#children}}
{{#display}}
{{^children.count}}
<li><a href="{{{action}}}">{{text}}</a></li>
{{/children.count}}
{{/display}}
{{/children}}
</ul>
</div>
</div>
{{#children}}
{{#display}}
{{#children.count}}
<hr>
<div class="row">
<div class="col-sm-3">
{{#action}}<h4><a href="{{action}}">{{text}}</a><h4>{{/action}}
{{^action}}<h4>{{text}}<h4>{{/action}}
</div>
<div class="col-sm-9">
<ul class="list-unstyled">
{{#children}}
{{> core/settings_link_page_single }}
{{/children}}
</ul>
</div>
</div>
{{/children.count}}
{{/display}}
{{/children}}
</div>
</div>
{{/children.count}}
{{/node.children}}
</div>

46
templates/core/settings_link_page_single.mustache

@ -1,46 +0,0 @@
{{!
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/>.
}}
{{!
@template core/settings_link_page_single
Displays the admin tree as a list of grouped links.
Example context (json):
{
"text": "Root of menu",
"key": "test0",
"display": true,
"children": []
}
}}
{{#display}}
{{#action}}
<li><a href="{{{action}}}">{{text}}</a></li>
{{/action}}
{{^action}}
<li><strong>{{text}}</strong></li>
{{/action}}
{{#children.count}}
<li>
<ul class="list-unstyled ml-2">
{{#children}}
{{> core/settings_link_page_single }}
{{/children}}
</ul>
</li>
{{/children.count}}
{{/display}}

33
templates/core/signup_form_layout.mustache

@ -1,33 +0,0 @@
{{!
@template core/signup_form_layout
Example context (json):
{
"logourl": "https://moodle.org/logo/moodle-logo.svg",
"sitename": "Site name",
"formhtml": "<p>(Form html would go here)</p>"
}
}}
<div class="container-fluid mt-1 mt-md-5">
<div class="row justify-content-md-center">
<div class="col-md-8 col-xl-6">
<div class="card">
<div class="card-body">
<div class="card-title text-xs-center">
{{#logourl}}
<h2><img src="{{logourl}}" class="img-fluid" title="{{sitename}}" alt="{{sitename}}"/></h2>
{{/logourl}}
{{^logourl}}
<h2>{{sitename}}</h2>
{{/logourl}}
<hr>
</div>
<div class="card-title">
<h3>{{#str}}newaccount{{/str}}</h3>
</div>
{{{formhtml}}}
</div>
</div>
</div>
</div>
</div>

61
templates/core/single_button.mustache

@ -1,61 +0,0 @@
{{!
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/>.
}}
{{!
@template core/single_button
Moodle template for a single button submit form.
Classes required for JS:
* none
Data attributes required for JS:
* none
Context variables required for this template:
* classes - a list of classes to wrap the form.
* method - get or post
* url - the action url to submit to
* formid - optional id value for the form
* params - array of params with name and value attributes
* primary - true if this is a primary action button
* id - id for the element
* tooltip - tooltip text for the button
* disabled - true if this element is disabled
* label - text to show on the button
Example context (json):
{ "method" : "get",
"url" : "#",
"primary" : true,
"tooltip" : "This is a tooltip",
"label" : "This is a the button text"
}
}}
<div class="{{classes}}">
<form method="{{method}}" action="{{url}}" {{#formid}}id="{{formid}}"{{/formid}}>
{{#params}}
<input type="hidden" name="{{name}}" value="{{value}}">
{{/params}}
<button type="submit" class="btn {{#primary}}btn-primary{{/primary}}{{^primary}}btn-secondary{{/primary}}"
id="{{id}}"
title={{#quote}}{{tooltip}}{{/quote}}
{{#disabled}}disabled{{/disabled}}>{{label}}</button>
</form>
</div>
{{#hasactions}}
{{> core/actions }}
{{/hasactions}}

16
templates/core/skip_links.mustache

@ -1,16 +0,0 @@
{{!
@template core/skip_links
Example context (json):
{
"links": [
{"url": "http://example.com/link1", "text": "Link 1"},
{"url": "http://example.com/link2", "text": "Link 2"}
]
}
}}
<div>
{{#links}}
<a class="sr-only sr-only-focusable" href="#{{{url}}}">{{{text}}}</a>
{{/links}}
</div>

44
templates/core/tabtree.mustache

@ -1,44 +0,0 @@
{{!
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/>.
}}
{{!
@template core/tabtree
Tab tree.
Example context (json):
{
"tabs": [{
"active": "true",
"inactive": "false",
"link": [{
"link": "http://moodle.org"
}],
"title": "Moodle.org",
"text": "Moodle community"
}]
}
}}
<ul class="nav nav-tabs mb-3">
{{#tabs}}
<li class="nav-item">
<a class="nav-link{{#active}} active{{/active}}{{#inactive}} disabled{{/inactive}}" {{#link}}href="{{{link}}}"{{/link}} title="{{title}}">{{{text}}}</a>
</li>
{{/tabs}}
</ul>
{{#secondrow}}
{{>core/tabtree}}
{{/secondrow}}

43
templates/core_admin/setting.mustache

@ -1,43 +0,0 @@
{{!
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/>.
}}
{{!
Setting.
}}
<div class="form-item row" id="{{id}}">
<div class="form-label col-sm-3 text-sm-right">
<label {{#labelfor}}for="{{labelfor}}"{{/labelfor}}>
{{{title}}}
{{#override}}
<div class="form-overridden">{{override}}</div>
{{/override}}
{{#warning}}
<div class="form-warning">{{warning}}</div>
{{/warning}}
</label>
<span class="form-shortname d-block small text-muted">{{{name}}}</span>
</div>
<div class="form-setting col-sm-9">
{{#error}}
<div><span class="error">{{error}}</span></div>
{{/error}}
{{{element}}}
{{#default}}
<div class="form-defaultinfo text-muted {{#forceltr}}text-ltr{{/forceltr}}">{{{default}}}</div>
{{/default}}
<div class="form-description mt-3">{{{description}}}</div>
</div>
</div>

30
templates/core_admin/setting_configcolourpicker.mustache

@ -1,30 +0,0 @@
{{!
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/>.
}}
{{!
Setting configcolourpicker.
}}
<div class="form-colourpicker defaultsnext">
<div class="admin_colourpicker clearfix">
{{#icon}}
{{>core/pix_icon}}
{{/icon}}
</div>
<input type="text" name="{{name}}" id="{{id}}" value="{{value}}" size="12" class="form-control text-ltr">
{{#haspreviewconfig}}
<input type="button" id="{{id}}_preview" value={{#quote}}{{#str}}preview{{/str}}{{/quote}} class="admin_colourpicker_preview">
{{/haspreviewconfig}}
</div>

31
templates/core_admin/setting_configduration.mustache

@ -1,31 +0,0 @@
{{!
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/>.
}}
{{!
Setting configduration.
}}
<div class="form-duration defaultsnext">
<div class="form-inline">
<input type="text" size="5" id="{{id}}v" name="{{name}}[v]" value="{{value}}" class="form-control text-ltr">
<label class="sr-only" for="{{id}}u">{{#str}}durationunits, admin{{/str}}</label>
<select id="{{id}}u" name="{{name}}[u]" class="form-control">
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}
</select>
</div>
</div>

33
templates/core_admin/setting_configfile.mustache

@ -1,33 +0,0 @@
{{!
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/>.
}}
{{!
Setting configfile.
}}
<div class="form-file defaultsnext">
<div class="form-inline">
<input type="text" name="{{name}}" id="{{id}}" size="{{size}}" value="{{value}}" class="form-control text-ltr" {{#readonly}}readonly{{/readonly}}>
{{#showvalidity}}
{{#valid}}
<span class="text-success">&#x2714;</span>
{{/valid}}
{{^valid}}
<span class="text-danger">&#x2718;</span>
{{/valid}}
{{/showvalidity}}
</div>
</div>

28
templates/core_admin/setting_configmultiselect.mustache

@ -1,28 +0,0 @@
{{!
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/>.
}}
{{!
Setting configmultiselect.
}}
<div class="form-select">
<input type="hidden" name="{{name}}[xxxxx]" value="1">
<select id="{{id}}" name="{{name}}[]" size="{{size}}" class="form-control" multiple>
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}
</select>
</div>

35
templates/core_admin/setting_configmultiselect_optgroup.mustache

@ -1,35 +0,0 @@
{{!
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/>.
}}
{{!
Setting configmultiselect with optgroup support.
}}
<div class="form-select">
<input type="hidden" name="{{name}}[xxxxx]" value="1">
<select id="{{id}}" name="{{name}}[]" size="{{size}}" class="form-control" multiple>
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}
{{#optgroups}}
<optgroup label="{{label}}">
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}
</optgroup>
{{/optgroups}}
</select>
</div>

27
templates/core_admin/setting_configselect.mustache

@ -1,27 +0,0 @@
{{!
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/>.
}}
{{!
Setting configselect.
}}
<div class="form-select defaultsnext">
<select id="{{id}}" name="{{name}}" class="custom-select">
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}
</select>
</div>

35
templates/core_admin/setting_configselect_optgroup.mustache

@ -1,35 +0,0 @@
{{!
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/>.
}}
{{!
Setting configselect with optgroup support.
}}
<div class="form-select defaultsnext">
<select id="{{id}}" name="{{name}}" class="custom-select">
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}
{{#optgroups}}
<optgroup label="{{label}}">
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}
</optgroup>
{{/optgroups}}
</select>
</div>

22
templates/core_admin/setting_configtext.mustache

@ -1,22 +0,0 @@
{{!
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/>.
}}
{{!
Setting configtext.
}}
<div class="form-text defaultsnext">
<input type="text" name="{{name}}" value="{{value}}" size="{{size}}" id="{{id}}" class="form-control {{#forceltr}}text-ltr{{/forceltr}}">
</div>

22
templates/core_admin/setting_configtextarea.mustache

@ -1,22 +0,0 @@
{{!
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/>.
}}
{{!
Setting configtextarea.
}}
<div class="form-textarea">
<textarea rows="{{rows}}" cols="{{cols}}" id="{{id}}" name="{{name}}" spellcheck="true" class="form-control {{#forceltr}}text-ltr{{/forceltr}}">{{value}}</textarea>
</div>

36
templates/core_admin/setting_configtime.mustache

@ -1,36 +0,0 @@
{{!
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/>.
}}
{{!
Setting configtime.
}}
<div class="form-time defaultsnext">
<div class="form-inline text-ltr">
<label class="sr-only" for="{{id}}h">{{#str}}hours{{/str}}</label>
<select id="{{id}}h" name="{{name}}[h]" class="custom-select">
{{#hours}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/hours}}
</select>:
<label class="sr-only" for="{{id}}m">{{#str}}minutes{{/str}}</label>
<select id="{{id}}m" name="{{name}}[m]" class="custom-select">
{{#minutes}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/minutes}}
</select>
</div>
</div>

29
templates/core_admin/setting_courselist_frontpage.mustache

@ -1,29 +0,0 @@
{{!
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/>.
}}
{{!
Setting courselist_frontpage.
}}
<div class="form-group">
{{#selects}}
<select id="{{id}}{{key}}" name="{{name}}[]" class="custom-select">
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}
</select>
<br>
{{/selects}}
</div>

46
templates/core_admin/setting_description.mustache

@ -1,46 +0,0 @@
{{!
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/>.
}}
{{!
@template core_admin/setting_description
Admin setting description template.
Context variables required for this template:
* labelfor - id of the form element
* title - Setting title
* name - Setting name
Example context (json):
{
"title": "Setting title",
"name": "Name",
"description": "Description goes here"
}
}}
{{!
Setting description.
}}
<div class="form-item row">
<div class="form-label col-sm-3 text-sm-right">
<label>
{{{title}}}
</label>
</div>
<div class="form-setting col-sm-9">
<div class="form-description">{{{description}}}</div>
</div>
</div>

39
templates/core_admin/setting_devicedetectregex.mustache

@ -1,39 +0,0 @@
{{!
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/>.
}}
{{!
Setting devicedetectregex.
}}
<table class="table table-striped">
<thead>
<tr>
<th>{{#str}}devicedetectregexexpression, admin{{/str}}</th>
<th>{{#str}}devicedetectregexvalue, admin{{/str}}</th>
</tr>
</thead>
<tbody>
{{#expressions}}
<tr>
<td class="c{{index}}">
<input type="text" name="{{name}}[expression{{index}}]" class="form-control" value="{{expression}}">
</td>
<td class="c{{index}}">
<input type="text" name="{{name}}[value{{index}}]" class="form-control" value="{{value}}">
</td>
</tr>
{{/expressions}}
</tbody>
</table>

51
templates/core_admin/setting_emoticons.mustache

@ -1,51 +0,0 @@
{{!
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/>.
}}
{{!
Setting emoticons.
}}
<div class="form-group">
<table id="emoticonsetting" class="admintable generaltable">
<thead>
<tr>
<th>{{#str}}emoticontext, admin{{/str}}</th>
<th>{{#str}}emoticonimagename, admin{{/str}}</th>
<th>{{#str}}emoticoncomponent, admin{{/str}}</th>
<th colspan="2">{{#str}}emoticonalt, admin{{/str}}</th>
<th></th>
</tr>
</thead>
<tbody>
{{#emoticons}}
<tr>
{{#fields}}
<td class="c{{index}}">
<input type="text" name="{{name}}[{{field}}]" class="form-text form-control text-ltr" value="{{value}}">
</td>
{{/fields}}
<td>
{{#icon}}
{{>core/pix_icon}}
{{/icon}}
</td>
</tr>
{{/emoticons}}
</tbody>
</table>
</div>
<div>
<a href="{{reseturl}}">{{#str}}emoticonsreset, admin{{/str}}</a>
</div>

31
templates/core_admin/setting_gradecat_combo.mustache

@ -1,31 +0,0 @@
{{!
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/>.
}}
{{!
Setting configselect.
}}
<div class="form-group">
<select id="{{id}}" name="{{name}}[value]" class="form-select custom-select">
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}
</select>
<input type="checkbox" id="{{id}}force" name="{{name}}[forced]" value="1" {{#forced}}checked{{/forced}}>
<label for="{{id}}force">{{#str}}force{{/str}}</label>
<input type="checkbox" id="{{id}}adv" name="{{name}}[adv]" value="1" {{#advanced}}checked{{/advanced}}>
<label for="{{id}}adv">{{#str}}advanced{{/str}}</label>
</div>

40
templates/core_admin/settings.mustache

@ -1,40 +0,0 @@
{{!
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/>.
}}
{{!
Settings.
}}
<form action="{{actionurl}}" method="post" id="adminsettings">
<div class="settingsform">
{{#params}}
<input type="hidden" name="{{name}}" value="{{value}}">
<input type="hidden" name="action" value="save-settings">
{{/params}}
<input type="hidden" name="sesskey" value="{{sesskey}}">
<input type="hidden" name="return" value="{{return}}">
{{#title}}
<h2>{{title}}</h2>
{{/title}}
{{{settings}}}
{{#showsave}}
<div class="row">
<div class="offset-sm-3 col-sm-3">
<button type="submit" class="btn btn-primary">{{#str}}savechanges, admin{{/str}}</button>
</div>
</div>
{{/showsave}}
</div>
</form>

72
templates/core_admin/settings_search_results.mustache

@ -1,72 +0,0 @@
{{!
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/>.
}}
{{!
@template core_admin/settings_search_results
Admin setting search results template.
Context variables required for this template:
* actionurl - Url to post to
* hasresults - True if there are results
* results - List of results containing url, title, path (array of strings), settings (array of raw html)
* showsave - Show save buttons
Example context (json):
{
"actionurl": "/",
"hasresults": true,
"results": [
{ "url": "/", "title": "Match!", "path": ["Administration", "Match!"], "settings": [ "blah blah blah" ] }
]
}
}}
<form action="{{actionurl}}" method="post" id="adminsettings">
<div>
<input type="hidden" name="sesskey" value="{{sesskey}}">
<input type="hidden" name="action" value="save-settings">
</div>
<fieldset>
<div class="clearer"></div>
<h2 class="main">{{#str}}searchresults, admin{{/str}}</h2>
{{#hasresults}}
{{#results}}
<h3 class="adminpagetitle"><a href="{{url}}">{{{title}}}</a></h3>
<ul class="adminpagepath" aria-label="{{#str}} pagepath, core {{/str}}">
{{#path}}
<li>{{.}}</li>
{{/path}}
</ul>
<fieldset class="adminsettings">
{{#settings}}
<div class="clearer"></div>
{{{.}}}
{{/settings}}
</fieldset>
{{/results}}
{{#showsave}}
<div class="row">
<div class="offset-sm-3 col-sm-3">
<button type="submit" class="btn btn-primary">{{#str}}savechanges, admin{{/str}}</button>
</div>
</div>
{{/showsave}}
{{/hasresults}}
{{^hasresults}}
{{#str}}noresults, admin{{/str}}
{{/hasresults}}
</fieldset>
</form>

64
templates/core_calendar/minicalendar_day_link.mustache

@ -1,64 +0,0 @@
{{!
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/>.
}}
{{!
@template core_calendar/minicalendar_day_link
Displays link to calendar day in mini calendar, with hover tooltip.
Example context (json):
{
"day": "Today",
"url": "http://example.com/",
"title": "Monday 2nd January",
"content": "<img class='icon smallicon' src='../../../pix/i/siteevent.svg'>Test site event"
}
}}
<a {{!
}} id="calendar-day-popover-link-{{courseid}}-{{year}}-{{yday}}-{{uniqid}}"{{!
}} href="{{$url}}{{url}}{{/url}}"{{!
}} data-container="body"{{!
}} data-toggle="popover"{{!
}} data-html="true"{{!
}} data-trigger="hover"{{!
}} data-placement="top"{{!
}} data-title="{{$title}}{{title}}{{/title}}"{{!
}} data-alternate="{{$nocontent}}{{/nocontent}}"{{!
}}>{{$day}}{{day}}{{/day}}</a>
<div class="hidden">
{{$content}}{{/content}}
</div>
{{#js}}
require(['jquery'], function($) {
require(['theme_ilb/popover'], function() {
var target = $("#calendar-day-popover-link-{{courseid}}-{{year}}-{{yday}}-{{uniqid}}");
target.popover({
content: function() {
var source = target.next().find("> *:not('.hidden')");
var content = $('<div>');
if (source.length) {
content.html(source.clone(false));
} else {
content.html(target.data('alternate'));
}
return content.html();
}
});
});
});
{{/js}}

47
templates/core_form/editor_textarea.mustache

@ -1,47 +0,0 @@
{{!
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/>.
}}
{{!
@template core_form/editor_textarea
Displays an editor field in a form.
Example context (json):
{
"name": "test",
"id": "test0",
"rows": 4,
"cols": 20,
"value": "Sample text",
"format": 3
}
}}
<div>
<textarea id="{{id}}" name="{{name}}[text]" class="form-control" rows="{{rows}}" cols="{{cols}}" spellcheck="true" {{#changelistener}} onblur="{{onblur}}"
onchange="{{onchange}}" {{/changelistener}}>{{value}}</textarea>
</div>
<div>
{{#hasformats}}
<select name="{{name}}[format]" id="menu{{name}}format" class="custom-select">
{{#formats}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{text}}</option>
{{/formats}}
</select>
{{/hasformats}}
{{^hasformats}}
<input name="{{name}}[format]" id="menu{{name}}format" type="hidden" value="{{format}}"/>
{{/hasformats}}
</div>

39
templates/core_form/element-advcheckbox-inline.mustache

@ -1,39 +0,0 @@
<label class="form-check-inline {{#error}}has-danger{{/error}} fitem {{#advanced}}advanced{{/advanced}} {{{element.extraclasses}}}">
{{^element.hardfrozen}}
{{^element.frozen}}
<input type="hidden" name="{{element.name}}" value="{{element.deselectedvalue}}">
{{/element.frozen}}
{{#element.frozen}}
<input type="hidden" name="{{element.name}}" value="{{element.frozenvalue}}">
{{/element.frozen}}
{{/element.hardfrozen}}
<input type="checkbox" name="{{element.name}}" class="form-check-input {{element.extraclasses}}"
id="{{element.id}}"
{{#element.selectedvalue}}
value="{{element.selectedvalue}}"
{{/element.selectedvalue}}
{{#element.checked}}checked{{/element.checked}}
size="{{element.size}}"
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}}
{{#element.frozen}}
disabled
{{/element.frozen}}
{{{element.attributes}}} >
{{{label}}}
</label>
{{#text}}
<em>{{{.}}}</em>
{{/text}}
{{{helpbutton}}}
<span class="form-control-feedback invalid-feedback" id="id_error_{{element.name}}" {{#error}} style="display: block;"{{/error}}>
{{{error}}}
</span>
{{^element.frozen}}
{{#js}}
require(['theme_ilb/form-display-errors'], function(module) {
module.enhance({{#quote}}{{element.id}}{{/quote}});
});
{{/js}}
{{/element.frozen}}

57
templates/core_form/element-advcheckbox.mustache

@ -1,57 +0,0 @@
<div class="form-group row {{#error}}has-danger{{/error}} fitem {{#advanced}}advanced{{/advanced}} {{{element.extraclasses}}}">
<div class="col-md-3">
{{#text}}
<label for="{{element.id}}">
{{{label}}}
</label>
{{/text}}
</div>
<div class="col-md-9 checkbox">
<div class="form-check">
<label>
{{^element.hardfrozen}}
{{^element.frozen}}
<input type="hidden" name="{{element.name}}" value="{{element.deselectedvalue}}">
{{/element.frozen}}
{{#element.frozen}}
<input type="hidden" name="{{element.name}}" value="{{element.frozenvalue}}">
{{/element.frozen}}
{{/element.hardfrozen}}
<input type="checkbox"
name="{{element.name}}"
class="form-check-input {{element.extraclasses}}"
{{#element.selectedvalue}}
value="{{element.selectedvalue}}"
{{/element.selectedvalue}}
id="{{element.id}}" {{#element.checked}}checked{{/element.checked}}
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}}
{{#element.frozen}}
disabled
{{/element.frozen}}
{{{element.attributes}}} >
{{#text}}
{{{.}}}
{{/text}}
{{^text}}
{{{label}}}
{{/text}}
</label>
<span class="text-nowrap">
{{#advanced}}<abbr class="initialism text-info" title="{{#str}}advanced{{/str}}">!</abbr>{{/advanced}}
{{{helpbutton}}}
</span>
</div>
<div class="form-control-feedback invalid-feedback" id="id_error_{{element.name}}" {{#error}} style="display: block;"{{/error}}>
{{{error}}}
</div>
</div>
</div>
{{^element.frozen}}
{{#js}}
require(['theme_ilb/form-display-errors'], function(module) {
module.enhance({{#quote}}{{element.id}}{{/quote}});
});
{{/js}}
{{/element.frozen}}

40
templates/core_form/element-autocomplete-inline.mustache

@ -1,40 +0,0 @@
{{< core_form/element-template-inline }}
{{$element}}
{{^element.frozen}}
<select class="custom-select {{#error}}is-invalid{{/error}}" name="{{element.name}}"
id="{{element.id}}"
{{#element.multiple}}multiple{{/element.multiple}}
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}}
{{{element.attributes}}} >
{{#element.options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{{text}}}</option>
{{/element.options}}
</select>
{{/element.frozen}}
{{#element.frozen}}
{{#element.options}}
{{#selected}}
{{{text}}}
{{^element.hardfrozen}}
<input type="hidden" name="{{element.name}}" value="{{value}}">
{{/element.hardfrozen}}
{{/selected}}
{{/element.options}}
{{/element.frozen}}
{{/element}}
{{/ core_form/element-template-inline }}
{{^element.frozen}}
{{#js}}
require(['core/form-autocomplete'], function(module) {
module.enhance({{#quote}}#{{element.id}}{{/quote}},
{{element.tags}},
{{#quote}}{{element.ajax}}{{/quote}},
{{#quote}}{{element.placeholder}}{{/quote}},
{{element.casesensitive}},
{{element.showsuggestions}},
{{#quote}}{{element.noselectionstring}}{{/quote}});
});
{{/js}}
{{/element.frozen}}

40
templates/core_form/element-autocomplete.mustache

@ -1,40 +0,0 @@
{{< core_form/element-template }}
{{$element}}
{{^element.frozen}}
<select class="custom-select {{#error}}is-invalid{{/error}}" name="{{element.name}}"
id="{{element.id}}"
{{#element.multiple}}multiple{{/element.multiple}}
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}}
{{{element.attributes}}} >
{{#element.options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}{{#html}} data-html="{{html}}"{{/html}}>{{{text}}}</option>
{{/element.options}}
</select>
{{/element.frozen}}
{{#element.frozen}}
{{#element.options}}
{{#selected}}
{{{text}}}
{{^element.hardfrozen}}
<input type="hidden" name="{{element.name}}" value="{{value}}">
{{/element.hardfrozen}}
{{/selected}}
{{/element.options}}
{{/element.frozen}}
{{/element}}
{{/ core_form/element-template }}
{{^element.frozen}}
{{#js}}
require(['core/form-autocomplete'], function(module) {
module.enhance({{#quote}}#{{element.id}}{{/quote}},
{{element.tags}},
{{#quote}}{{element.ajax}}{{/quote}},
{{#quote}}{{element.placeholder}}{{/quote}},
{{element.casesensitive}},
{{element.showsuggestions}},
{{#quote}}{{element.noselectionstring}}{{/quote}});
});
{{/js}}
{{/element.frozen}}

18
templates/core_form/element-button-inline.mustache

@ -1,18 +0,0 @@
{{< core_form/element-template-inline }}
{{$element}}
{{^element.frozen}}
<button
class="btn btn-secondary"
name="{{element.name}}"
id="{{element.id}}"
type="button"
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}}
{{{element.attributes}}}
>
{{{element.value}}}
</button>
{{/element.frozen}}
{{/element}}
{{/ core_form/element-template-inline }}

17
templates/core_form/element-button.mustache

@ -1,17 +0,0 @@
{{< core_form/element-template }}
{{$element}}
{{^element.frozen}}
<button
class="btn btn-secondary ml-0"
name="{{element.name}}"
id="{{element.id}}"
type="button"
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}}
{{{element.attributes}}}>
{{{element.value}}}
</button>
{{/element.frozen}}
{{/element}}
{{/ core_form/element-template }}

39
templates/core_form/element-checkbox-inline.mustache

@ -1,39 +0,0 @@
<label class="form-check {{#error}}has-danger{{/error}} fitem {{#advanced}}advanced{{/advanced}} {{{element.extraclasses}}}">
{{^element.hardfrozen}}
{{#element.frozen}}
<input type="hidden" name="{{element.name}}" value="{{element.frozenvalue}}">
{{/element.frozen}}
{{/element.hardfrozen}}
<input type="checkbox" name="{{element.name}}" class="form-check-input {{element.extraclasses}}"
id="{{element.id}}"
{{#element.value}}
value="{{element.value}}"
{{/element.value}}
{{^element.value}}
value="1"
{{/element.value}}
{{#element.checked}}checked{{/element.checked}}
size="{{element.size}}"
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}}
{{#element.frozen}}
disabled
{{/element.frozen}}
{{{element.attributes}}} >
{{{label}}}
</label>
{{#text}}
<em>{{{.}}}</em>
{{/text}}
{{{helpbutton}}}
<span class="form-control-feedback invalid-feedback" id="id_error_{{element.name}}" {{#error}} style="display: block;"{{/error}}>
{{{error}}}
</span>
{{^element.frozen}}
{{#js}}
require(['theme_ilb/form-display-errors'], function(module) {
module.enhance({{#quote}}{{element.id}}{{/quote}});
});
{{/js}}
{{/element.frozen}}

57
templates/core_form/element-checkbox.mustache

@ -1,57 +0,0 @@
<div class="form-group row {{#error}}has-danger{{/error}} fitem {{#advanced}}advanced{{/advanced}} {{{element.extraclasses}}}">
<div class="col-md-3">
{{#text}}
<label for="{{element.id}}">
{{{label}}}
</label>
{{/text}}
</div>
<div class="col-md-9 checkbox">
<div class="form-check">
<label>
{{^element.hardfrozen}}
{{#element.frozen}}
<input type="hidden" name="{{element.name}}" value="{{element.frozenvalue}}">
{{/element.frozen}}
{{/element.hardfrozen}}
<input type="checkbox"
name="{{element.name}}"
class="form-check-input {{element.extraclasses}}"
{{#element.value}}
value="{{element.value}}"
{{/element.value}}
{{^element.value}}
value="1"
{{/element.value}}
id="{{element.id}}" {{#element.checked}}checked{{/element.checked}}
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}}
{{#element.frozen}}
disabled
{{/element.frozen}}
{{{element.attributes}}} >
{{#text}}
{{{.}}}
{{/text}}
{{^text}}
{{{label}}}
{{/text}}
</label>
<span class="text-nowrap">
{{#advanced}}<abbr class="initialism text-info" title="{{#str}}advanced{{/str}}">!</abbr>{{/advanced}}
{{{helpbutton}}}
</span>
</div>
<div class="form-control-feedback invalid-feedback" id="id_error_{{element.name}}" {{#error}} style="display: block;"{{/error}}>
{{{error}}}
</div>
</div>
</div>
{{^element.frozen}}
{{#js}}
require(['theme_ilb/form-display-errors'], function(module) {
module.enhance({{#quote}}{{element.id}}{{/quote}});
});
{{/js}}
{{/element.frozen}}

10
templates/core_form/element-date_selector-inline.mustache

@ -1,10 +0,0 @@
{{< core_form/element-template-inline }}
{{$element}}
<span class="fdate_selector d-flex align-items-center">
{{#element.elements}}
{{{separator}}}
{{{html}}}
{{/element.elements}}
</span>
{{/element}}
{{/ core_form/element-template-inline }}

10
templates/core_form/element-date_selector.mustache

@ -1,10 +0,0 @@
{{< core_form/element-template }}
{{$element}}
<span class="fdate_selector d-flex">
{{#element.elements}}
{{{separator}}}
{{{html}}}
{{/element.elements}}
</span>
{{/element}}
{{/ core_form/element-template }}

10
templates/core_form/element-date_time_selector-inline.mustache

@ -1,10 +0,0 @@
{{< core_form/element-template-inline }}
{{$element}}
<div class="fdate_time_selector d-flex flex-wrap align-items-center">
{{#element.elements}}
{{{separator}}}
{{{html}}}
{{/element.elements}}
</div>
{{/element}}
{{/ core_form/element-template-inline }}

10
templates/core_form/element-date_time_selector.mustache

@ -1,10 +0,0 @@
{{< core_form/element-template }}
{{$element}}
<div class="fdate_time_selector d-flex flex-wrap align-items-center">
{{#element.elements}}
{{{separator}}}
{{{html}}}
{{/element.elements}}
</div>
{{/element}}
{{/ core_form/element-template }}

43
templates/core_form/element-defaultcustom-inline.mustache

@ -1,43 +0,0 @@
{{!
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/>.
}}
{{!
@template core_form/element-defaultcustom-inline
Defaultcustom form element template.
Example context (json):
{
"element": {
"elements": [
{"html": "<select><option>Default</option><option>Custom</option></select>",
"separator": ""},
{"html": "<input type=text>",
"separator": ""}
]
}
}
}}
{{< core_form/element-template-inline }}
{{$element}}
<span class="fdefaultcustom">
{{#element.elements}}
{{{separator}}}
{{{html}}}
{{/element.elements}}
</span>
{{/element}}
{{/ core_form/element-template-inline }}

43
templates/core_form/element-defaultcustom.mustache

@ -1,43 +0,0 @@
{{!
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/>.
}}
{{!
@template core_form/element-defaultcustom
Defaultcustom form element template.
Example context (json):
{
"element": {
"elements": [
{"html": "<select><option>Default</option><option>Custom</option></select>",
"separator": ""},
{"html": "<input type=text>",
"separator": ""}
]
}
}
}}
{{< core_form/element-template }}
{{$element}}
<span class="fdefaultcustom">
{{#element.elements}}
{{{separator}}}
{{{html}}}
{{/element.elements}}
</span>
{{/element}}
{{/ core_form/element-template }}

10
templates/core_form/element-duration-inline.mustache

@ -1,10 +0,0 @@
{{< core_form/element-template-inline }}
{{$element}}
<div class="d-flex ml-1">
{{#element.elements}}
{{{separator}}}
{{{html}}}
{{/element.elements}}
</div>
{{/element}}
{{/ core_form/element-template-inline }}

1
templates/core_form/element-duration.mustache

@ -1 +0,0 @@
{{> core_form/element-group }}

5
templates/core_form/element-editor.mustache

@ -1,5 +0,0 @@
{{< core_form/element-template }}
{{$element}}
{{{element.html}}}
{{/element}}
{{/ core_form/element-template }}

5
templates/core_form/element-filemanager.mustache

@ -1,5 +0,0 @@
{{< core_form/element-template }}
{{$element}}
{{{element.html}}}
{{/element}}
{{/ core_form/element-template }}

5
templates/core_form/element-filepicker.mustache

@ -1,5 +0,0 @@
{{< core_form/element-template }}
{{$element}}
{{{element.html}}}
{{/element}}
{{/ core_form/element-template }}

1
templates/core_form/element-filetypes.mustache

@ -1 +0,0 @@
{{> core_form/element-group }}

1
templates/core_form/element-float-inline.mustache

@ -0,0 +1 @@
{{> core_form/element-text-inline }}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save