MDL-75669 theme_boost: Refactor custom form elements to BS5

- .custom-check is now .form-check.
- .custom-check.custom-switch is now .form-check.form-switch.
- .custom-select is now .form-select.
- .custom-file and .form-file have been replaced by custom styles on top of .form-control.
- .custom-range is now .form-range.
- Dropped .input-group-append and .input-group-prepend. You can now just add buttons
  and .input-group-text as direct children of the input groups.
This commit is contained in:
Mikel Martín 2024-12-16 16:44:08 +01:00
parent 5416483611
commit 04975cd2b2
199 changed files with 510 additions and 731 deletions

View file

@ -544,7 +544,7 @@ class core_role_define_role_table_advanced extends core_role_capability_table_wi
$options[$type] = get_string('archetype'.$type, 'role');
}
return html_writer::select($options, 'archetype', $this->role->archetype, false,
array('class' => 'custom-select'));
['class' => 'form-select']);
}
protected function get_assignable_levels_control() {

View file

@ -28,9 +28,6 @@
<div class="simplesearchform d-flex justify-content-end">
<form autocomplete="off" action="{{action}}" method="get" accept-charset="utf-8" class="mform d-flex flex-wrap align-items-center simplesearchform">
<div class="input-group">
<label for="searchinput-{{uniqid}}">
<span class="visually-hidden">{{#str}} search, core {{/str}}</span>
</label>
<input type="text"
id="searchinput-{{uniqid}}"
class="form-control"
@ -41,12 +38,13 @@
autocomplete="off"
{{#query}}value="{{.}}"{{/query}}
>
<div class="input-group-append">
<label for="searchinput-{{uniqid}}">
<span class="visually-hidden">{{#str}} search, core {{/str}}</span>
</label>
<button type="submit" class="btn btn-primary search-icon">
{{#pix}} a/search, core {{/pix}}
<span class="visually-hidden">{{#str}} search, core {{/str}}</span>
</button>
</div>
</div>
</form>
</div>

View file

@ -59,9 +59,9 @@
Setting autocomplete.
}}
<div class="form-select defaultsnext">
<div class="defaultsnext">
<input type="hidden" name="{{name}}[xxxxx]" value="_qf__force_multiselect_submission">
<select class="custom-select" name="{{name}}[]"
<select class="form-select" name="{{name}}[]"
id="{{id}}"
{{#multiple}}multiple{{/multiple}}>
{{#options}}

View file

@ -81,7 +81,7 @@
{{#default}}
<div class="form-defaultinfo text-muted {{#forceltr}}text-ltr{{/forceltr}}">{{{default}}}</div>
{{/default}}
<div class="form-description mt-3">{{{description}}}</div>
<div class="form-text mt-2">{{{description}}}</div>
{{#dependenton}}<div class="form-dependenton mb-4 text-muted">{{{.}}}</div>{{/dependenton}}
</div>
</div>

View file

@ -42,7 +42,7 @@
<div class="d-flex flex-wrap align-items-center">
<input type="text" size="5" id="{{id}}v" name="{{name}}[v]" value="{{value}}" class="form-control text-ltr" {{#readonly}}disabled{{/readonly}}>
<label class="visually-hidden" for="{{id}}u">{{#str}}durationunits, admin{{/str}}</label>
<select id="{{id}}u" name="{{name}}[u]" class="form-control custom-select" {{#readonly}}disabled{{/readonly}}>
<select id="{{id}}u" name="{{name}}[u]" class="form-control form-select" {{#readonly}}disabled{{/readonly}}>
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}

View file

@ -42,7 +42,7 @@
<div class="d-flex flex-wrap align-items-center">
<input type="text" size="5" id="{{id}}v" name="{{name}}[v]" value="{{value}}" class="form-control text-ltr" {{#readonly}}disabled{{/readonly}}>
<label class="visually-hidden" for="{{id}}u">{{#str}}filesizeunits, admin{{/str}}</label>
<select id="{{id}}u" name="{{name}}[u]" class="form-control custom-select" {{#readonly}}disabled{{/readonly}}>
<select id="{{id}}u" name="{{name}}[u]" class="form-control form-select" {{#readonly}}disabled{{/readonly}}>
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}

View file

@ -39,7 +39,7 @@
{{!
Setting configmultiselect.
}}
<div class="form-select">
<div>
{{^readonly}}<input type="hidden" name="{{name}}[xxxxx]" value="1">{{/readonly}}
<select {{#readonly}}disabled{{/readonly}} id="{{id}}" name="{{name}}[]" size="{{size}}" class="form-control" multiple>
{{#options}}

View file

@ -58,7 +58,7 @@
{{!
Setting configmultiselect with optgroup support.
}}
<div class="form-select">
<div>
{{^readonly}}<input type="hidden" name="{{name}}[xxxxx]" value="1">{{/readonly}}
<select {{#readonly}}disabled{{/readonly}} id="{{id}}" name="{{name}}[]" size="{{size}}" class="form-control" multiple>
{{#options}}

View file

@ -39,8 +39,8 @@
{{!
Setting configselect.
}}
<div class="form-select defaultsnext">
<select {{#readonly}}disabled{{/readonly}} id="{{id}}" name="{{name}}" class="custom-select">
<div class="defaultsnext">
<select {{#readonly}}disabled{{/readonly}} id="{{id}}" name="{{name}}" class="form-select">
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}

View file

@ -56,8 +56,8 @@
{{!
Setting configselect with optgroup support.
}}
<div class="form-select defaultsnext">
<select {{#readonly}}disabled{{/readonly}} id="{{id}}" name="{{name}}" class="custom-select">
<div class="defaultsnext">
<select {{#readonly}}disabled{{/readonly}} id="{{id}}" name="{{name}}" class="form-select">
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}

View file

@ -47,13 +47,13 @@
<div class="form-time defaultsnext">
<div class="d-flex flex-wrap align-items-center text-ltr">
<label class="visually-hidden" for="{{id}}h">{{#str}}hours{{/str}}</label>
<select id="{{id}}h" name="{{name}}[h]" class="custom-select" {{#readonly}}disabled{{/readonly}}>
<select id="{{id}}h" name="{{name}}[h]" class="form-select" {{#readonly}}disabled{{/readonly}}>
{{#hours}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/hours}}
</select>:
<label class="visually-hidden" for="{{id}}m">{{#str}}minutes{{/str}}</label>
<select id="{{id}}m" name="{{name}}[m]" class="custom-select" {{#readonly}}disabled{{/readonly}}>
<select id="{{id}}m" name="{{name}}[m]" class="form-select" {{#readonly}}disabled{{/readonly}}>
{{#minutes}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/minutes}}

View file

@ -42,7 +42,7 @@
}}
<div class="mb-3">
{{#selects}}
<select id="{{id}}{{key}}" name="{{name}}[]" class="custom-select mb-1">
<select id="{{id}}{{key}}" name="{{name}}[]" class="form-select mb-1">
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}

View file

@ -41,6 +41,6 @@
</label>
</div>
<div class="form-setting col-sm-9">
<div class="form-description">{{{description}}}</div>
<div class="form-text">{{{description}}}</div>
</div>
</div>

View file

@ -39,7 +39,7 @@
Setting configselect.
}}
<div class="mb-3">
<select id="{{id}}" name="{{name}}[value]" class="form-select custom-select">
<select id="{{id}}" name="{{name}}[value]" class="form-select">
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}

View file

@ -45,14 +45,14 @@
{{#trainedexternally}}
<div class="box mb-4">{{#str}} evaluationmodeinfo, tool_analytics {{/str}}</div>
<div class="custom-control custom-radio">
<input class="custom-control-input" type="radio" name="evaluationmode" id="id-mode-trainedmodel" value="trainedmodel" checked>
<label class="custom-control-label" for="id-mode-trainedmodel">{{#str}} evaluationmodetrainedmodel, tool_analytics {{/str}}</label>
<div class="form-check custom-radio">
<input class="form-check-input" type="radio" name="evaluationmode" id="id-mode-trainedmodel" value="trainedmodel" checked>
<label class="form-check-label" for="id-mode-trainedmodel">{{#str}} evaluationmodetrainedmodel, tool_analytics {{/str}}</label>
</div>
<div class="custom-control custom-radio">
<input class="custom-control-input" type="radio" name="evaluationmode" id="id-mode-configuration" value="configuration">
<label class="custom-control-label" for="id-mode-configuration">{{#str}} evaluationmodeconfiguration, tool_analytics {{/str}}</label>
<div class="form-check custom-radio">
<input class="form-check-input" type="radio" name="evaluationmode" id="id-mode-configuration" value="configuration">
<label class="form-check-label" for="id-mode-configuration">{{#str}} evaluationmodeconfiguration, tool_analytics {{/str}}</label>
</div>
{{/trainedexternally}}
@ -60,7 +60,7 @@
<div id="id-evaluation-timesplitting-container" class="mt-3 {{#trainedexternally}}hidden{{/trainedexternally}}">
{{#str}} selecttimesplittingforevaluation, tool_analytics {{/str}}
<div>
<select id="id-evaluation-timesplitting" name="timesplitting" class="custom-select mt-3">
<select id="id-evaluation-timesplitting" name="timesplitting" class="form-select mt-3">
{{#timesplittingmethods}}
<option value="{{id}}">{{text}}</option>
{{/timesplittingmethods}}

View file

@ -31,17 +31,17 @@
{
}
}}
<div class="custom-control custom-radio">
<input class="custom-control-input" type="radio" name="exportoption" id="id-mode-exportdata" value="exportdata">
<label class="custom-control-label" for="id-mode-exportdata">{{#str}} exporttrainingdata, tool_analytics {{/str}}</label>
<div class="form-check custom-radio">
<input class="form-check-input" type="radio" name="exportoption" id="id-mode-exportdata" value="exportdata">
<label class="form-check-label" for="id-mode-exportdata">{{#str}} exporttrainingdata, tool_analytics {{/str}}</label>
</div>
<div class="custom-control custom-radio">
<input class="custom-control-input" type="radio" name="exportoption" id="id-mode-exportmodel" value="exportmodel" checked>
<label class="custom-control-label" for="id-mode-exportmodel">{{#str}} exportmodel, tool_analytics {{/str}}</label>
<div class="form-check custom-radio">
<input class="form-check-input" type="radio" name="exportoption" id="id-mode-exportmodel" value="exportmodel" checked>
<label class="form-check-label" for="id-mode-exportmodel">{{#str}} exportmodel, tool_analytics {{/str}}</label>
</div>
<div class="custom-control custom-checkbox ms-5" id="id-includeweights-container">
<input class="custom-control-input" type="checkbox" id="id-includeweights" value="1" checked>
<label class="custom-control-label" for="id-includeweights">{{#str}} exportincludeweights, tool_analytics {{/str}}</label>
<div class="form-check custom-checkbox ms-5" id="id-includeweights-container">
<input class="form-check-input" type="checkbox" id="id-includeweights" value="1" checked>
<label class="form-check-label" for="id-includeweights">{{#str}} exportincludeweights, tool_analytics {{/str}}</label>
</div>
{{#js}}

View file

@ -1,3 +1,3 @@
define("tool_dataprivacy/selectedcourses",["exports","core/ajax","core/notification","core/modal_save_cancel","core/modal_events","core/fragment","core/prefetch","core/str"],(function(_exports,_ajax,_notification,_modal_save_cancel,_modal_events,_fragment,_prefetch,_str){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_ajax=_interopRequireDefault(_ajax),_notification=_interopRequireDefault(_notification),_modal_save_cancel=_interopRequireDefault(_modal_save_cancel),_modal_events=_interopRequireDefault(_modal_events),_fragment=_interopRequireDefault(_fragment),(0,_prefetch.prefetchStrings)("tool_dataprivacy",["selectcourses","approverequest","errornoselectedcourse"]);return _exports.default=class{constructor(contextId,requestId){_defineProperty(this,"contextId",0),_defineProperty(this,"requestId",0),this.contextId=contextId,this.requestId=requestId,_modal_save_cancel.default.create({title:(0,_str.getString)("selectcourses","tool_dataprivacy"),body:this.getBody({requestid:requestId}),large:!0,removeOnClose:!0,buttons:{save:(0,_str.getString)("approverequest","tool_dataprivacy")}}).then((modal=>(this.modal=modal,modal))).then((modal=>(modal.getRoot().on(_modal_events.default.save,this.submitForm.bind(this)),modal.getRoot().on("submit","form",this.submitFormAjax.bind(this)),modal.show(),modal))).catch(_notification.default.exception)}getBody(formdata){const params=formdata?{jsonformdata:JSON.stringify(formdata)}:null;return _fragment.default.loadFragment("tool_dataprivacy","selectcourses_form",this.contextId,params)}submitForm(e){e.preventDefault(),this.modal.getRoot().find("form").submit()}submitFormAjax(e){e.preventDefault();let formData=this.modal.getRoot().find("form").serialize();if(-1===formData.indexOf("coursecontextids")){const customSelect=this.modal.getRoot().find(".custom-select"),invalidText=this.modal.getRoot().find(".invalid-feedback");return customSelect.addClass("is-invalid"),invalidText.attr("style","display: block"),void(0,_str.getString)("errornoselectedcourse","tool_dataprivacy").then((value=>{invalidText.empty().append(value)})).catch(_notification.default.exception)}_ajax.default.call([{methodname:"tool_dataprivacy_submit_selected_courses_form",args:{requestid:this.requestId,jsonformdata:JSON.stringify(formData)}}])[0].then((data=>(data.warnings.length>0?this.modal.setBody(this.getBody(formData)):(this.modal.destroy(),document.location.reload()),data))).catch((error=>_notification.default.exception(error)))}},_exports.default}));
define("tool_dataprivacy/selectedcourses",["exports","core/ajax","core/notification","core/modal_save_cancel","core/modal_events","core/fragment","core/prefetch","core/str"],(function(_exports,_ajax,_notification,_modal_save_cancel,_modal_events,_fragment,_prefetch,_str){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_ajax=_interopRequireDefault(_ajax),_notification=_interopRequireDefault(_notification),_modal_save_cancel=_interopRequireDefault(_modal_save_cancel),_modal_events=_interopRequireDefault(_modal_events),_fragment=_interopRequireDefault(_fragment),(0,_prefetch.prefetchStrings)("tool_dataprivacy",["selectcourses","approverequest","errornoselectedcourse"]);return _exports.default=class{constructor(contextId,requestId){_defineProperty(this,"contextId",0),_defineProperty(this,"requestId",0),this.contextId=contextId,this.requestId=requestId,_modal_save_cancel.default.create({title:(0,_str.getString)("selectcourses","tool_dataprivacy"),body:this.getBody({requestid:requestId}),large:!0,removeOnClose:!0,buttons:{save:(0,_str.getString)("approverequest","tool_dataprivacy")}}).then((modal=>(this.modal=modal,modal))).then((modal=>(modal.getRoot().on(_modal_events.default.save,this.submitForm.bind(this)),modal.getRoot().on("submit","form",this.submitFormAjax.bind(this)),modal.show(),modal))).catch(_notification.default.exception)}getBody(formdata){const params=formdata?{jsonformdata:JSON.stringify(formdata)}:null;return _fragment.default.loadFragment("tool_dataprivacy","selectcourses_form",this.contextId,params)}submitForm(e){e.preventDefault(),this.modal.getRoot().find("form").submit()}submitFormAjax(e){e.preventDefault();let formData=this.modal.getRoot().find("form").serialize();if(-1===formData.indexOf("coursecontextids")){const customSelect=this.modal.getRoot().find(".form-select"),invalidText=this.modal.getRoot().find(".invalid-feedback");return customSelect.addClass("is-invalid"),invalidText.attr("style","display: block"),void(0,_str.getString)("errornoselectedcourse","tool_dataprivacy").then((value=>{invalidText.empty().append(value)})).catch(_notification.default.exception)}_ajax.default.call([{methodname:"tool_dataprivacy_submit_selected_courses_form",args:{requestid:this.requestId,jsonformdata:JSON.stringify(formData)}}])[0].then((data=>(data.warnings.length>0?this.modal.setBody(this.getBody(formData)):(this.modal.destroy(),document.location.reload()),data))).catch((error=>_notification.default.exception(error)))}},_exports.default}));
//# sourceMappingURL=selectedcourses.min.js.map

File diff suppressed because one or more lines are too long

View file

@ -128,7 +128,7 @@ export default class SelectedCourses {
let formData = this.modal.getRoot().find('form').serialize();
if (formData.indexOf('coursecontextids') === -1) {
const customSelect = this.modal.getRoot().find('.custom-select');
const customSelect = this.modal.getRoot().find('.form-select');
const invalidText = this.modal.getRoot().find('.invalid-feedback');
customSelect.addClass('is-invalid');
invalidText.attr('style', 'display: block');

View file

@ -46,7 +46,7 @@
}}
<div class="mt-1 d-inline-block w-100">
<div class="float-start">
<select id="bulk-action" class="select custom-select">
<select id="bulk-action" class="select form-select">
{{#options}}
<option value="{{ value }}">{{ name }}</option>
{{/options}}

View file

@ -39,7 +39,7 @@
<div class="content">
<div data-region="rating">
<label for="rating_{{uniqid}}">{{#str}}rating, tool_lp{{/str}}</label>
<select name="rating" id="rating_{{uniqid}}" class="custom-select">
<select name="rating" id="rating_{{uniqid}}" class="form-select">
{{#ratings}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/ratings}}

View file

@ -54,7 +54,7 @@
<div data-region="competencylinktree">
{{^singleFramework}}
<h3>{{#str}}competencyframeworks, tool_lp{{/str}}</h3>
<select data-action="chooseframework" class="custom-select">
<select data-action="chooseframework" class="form-select">
{{#frameworks}}
<option value="{{id}}" {{#selected}}selected="selected"{{/selected}}>{{{shortname}}} <em>{{idnumber}}</em></option>
{{/frameworks}}

View file

@ -57,7 +57,7 @@
<div data-region="competencylinktree">
{{^singlePlan}}
<h3>{{#str}}learningplans, tool_lp{{/str}}</h3>
<select data-action="chooseplan" class="custom-select">
<select data-action="chooseplan" class="form-select">
{{#plans}}
<option value="{{id}}" {{#selected}}selected="selected"{{/selected}}>{{{name}}}</option>
{{/plans}}

View file

@ -36,7 +36,7 @@
{{#hascompetencies}}
<span>
<label for="competency-nav-{{uniqid}}" class="accesshide">{{#str}}jumptocompetency, tool_lp{{/str}}</label>
<select class="custom-select" id="competency-nav-{{uniqid}}">
<select class="form-select" id="competency-nav-{{uniqid}}">
{{#competencies}}
<option value="{{id}}" {{#selected}}selected="selected"{{/selected}}>{{{shortname}}} {{idnumber}}</option>
{{/competencies}}

View file

@ -60,7 +60,7 @@
<div data-region="rule-base" class="form">
<div data-region="rule-outcome" class="mb-3">
<label>{{#str}}outcome, tool_lp{{/str}}</label>
<select name="outcome" class="custom-select">
<select name="outcome" class="form-select">
{{#outcomes}}
<option value="{{code}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/outcomes}}
@ -68,7 +68,7 @@
</div>
<div data-region="rule-type" class="mb-3">
<label>{{#str}}when, tool_lp{{/str}}</label>
<select name="rule" class="custom-select">
<select name="rule" class="form-select">
<option value="-1">{{#str}}choosedots{{/str}}</option>
{{#rules}}
<option value="{{type}}" {{#selected}}selected{{/selected}}>{{name}}</option>

View file

@ -117,7 +117,7 @@
<div data-region="coursecompetency-ruleoutcome">
<label>
{{#str}}uponcoursecompletion, tool_lp{{/str}}
<select data-field="ruleoutcome" data-id="{{coursecompetency.id}}" class="custom-select">
<select data-field="ruleoutcome" data-id="{{coursecompetency.id}}" class="form-select">
{{#ruleoutcomeoptions}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{text}}</option>
{{/ruleoutcomeoptions}}

View file

@ -51,12 +51,10 @@
<p>
<form data-region="filtercompetencies" data-frameworkid="{{framework.id}}" class="d-flex flex-wrap align-items-center">
<div class="input-group mb-3">
<label class="accesshide" for="filter{{uniqid}}">{{#str}}search, tool_lp{{/str}}</label>
<input class="form-control" type="text" id="filter{{uniqid}}" placeholder="{{#str}}search, tool_lp{{/str}}" value="{{search}}">
<div class="input-group-append">
<label class="accesshide" for="filter{{uniqid}}">{{#str}}search, tool_lp{{/str}}</label>
<button class="btn btn-secondary">{{#pix}}a/search, , {{#str}}search{{/str}}{{/pix}}</button>
</div>
</div>
</form>
</p>
<ul data-enhance="tree" class="competency-tree">

View file

@ -44,7 +44,7 @@
{{#hasusers}}
<span>
<label for="user-nav-{{uniqid}}" class="accesshide">{{#str}}jumptouser, tool_lp{{/str}}</label>
<select id="user-nav-{{uniqid}}" class="custom-select">
<select id="user-nav-{{uniqid}}" class="form-select">
{{#users}}
<option value="{{id}}" {{#selected}}selected="selected"{{/selected}}>{{fullname}}</option>
{{/users}}
@ -55,7 +55,7 @@
{{#hascompetencies}}
<span>
<label for="competency-nav-{{uniqid}}" class="accesshide">{{#str}}jumptocompetency, tool_lp{{/str}}</label>
<select id="competency-nav-{{uniqid}}" class="custom-select">
<select id="competency-nav-{{uniqid}}" class="form-select">
{{#competencies}}
<option value="{{id}}" {{#selected}}selected="selected"{{/selected}}>{{{shortname}}} {{idnumber}}</option>
{{/competencies}}

View file

@ -50,14 +50,12 @@
aria-label="{{#str}} aria:enterprofile, tool_moodlenet {{/str}}"
autocomplete="off"
>
<div class="input-group-append z-index-0">
<button class="btn btn-secondary"
data-action="submit" id="button-addon2"
>
{{#str}} saveandgo, tool_moodlenet {{/str}}
</button>
</div>
</div>
<p class="text-start" aria-live="assertive" data-region="validation-area"></p>
<p class="text-start">{{#str}} forminfo, tool_moodlenet {{/str}}</p>
</div>

View file

@ -28,7 +28,7 @@ M.availability_completion.form.getNode = function(json) {
var html = '<span class="col-form-label pe-3"> ' + M.util.get_string('title', 'availability_completion') + '</span>' +
' <span class="availability-group mb-3"><label>' +
'<span class="accesshide">' + M.util.get_string('label_cm', 'availability_completion') + ' </span>' +
'<select class="custom-select" name="cm" title="' + M.util.get_string('label_cm', 'availability_completion') + '">' +
'<select class="form-select" name="cm" title="' + M.util.get_string('label_cm', 'availability_completion') + '">' +
'<option value="0">' + M.util.get_string('choosedots', 'moodle') + '</option>';
for (var i = 0; i < this.cms.length; i++) {
var cm = this.cms[i];
@ -37,7 +37,7 @@ M.availability_completion.form.getNode = function(json) {
}
html += '</select></label> <label><span class="accesshide">' +
M.util.get_string('label_completion', 'availability_completion') +
' </span><select class="custom-select" ' +
' </span><select class="form-select" ' +
'name="e" title="' + M.util.get_string('label_completion', 'availability_completion') + '">' +
'<option value="1">' + M.util.get_string('option_complete', 'availability_completion') + '</option>' +
'<option value="0">' + M.util.get_string('option_incomplete', 'availability_completion') + '</option>' +

View file

@ -1 +1 @@
YUI.add("moodle-availability_completion-form",function(o,e){M.availability_completion=M.availability_completion||{},M.availability_completion.form=o.Object(M.core_availability.plugin),M.availability_completion.form.initInner=function(e){this.cms=e},M.availability_completion.form.getNode=function(e){for(var i,l,t='<span class="col-form-label pe-3"> '+M.util.get_string("title","availability_completion")+'</span> <span class="availability-group mb-3"><label><span class="accesshide">'+M.util.get_string("label_cm","availability_completion")+' </span><select class="custom-select" name="cm" title="'+M.util.get_string("label_cm","availability_completion")+'"><option value="0">'+M.util.get_string("choosedots","moodle")+"</option>",a=0;a<this.cms.length;a++)t+='<option value="'+(i=this.cms[a]).id+'">'+i.name+"</option>";return t+='</select></label> <label><span class="accesshide">'+M.util.get_string("label_completion","availability_completion")+' </span><select class="custom-select" name="e" title="'+M.util.get_string("label_completion","availability_completion")+'"><option value="1">'+M.util.get_string("option_complete","availability_completion")+'</option><option value="0">'+M.util.get_string("option_incomplete","availability_completion")+'</option><option value="2">'+M.util.get_string("option_pass","availability_completion")+'</option><option value="3">'+M.util.get_string("option_fail","availability_completion")+"</option></select></label></span>",l=o.Node.create('<span class="d-flex flex-wrap align-items-center">'+t+"</span>"),e.cm!==undefined&&l.one("select[name=cm] > option[value="+e.cm+"]")&&l.one("select[name=cm]").set("value",""+e.cm),e.e!==undefined&&l.one("select[name=e]").set("value",""+e.e),M.availability_completion.form.addedEvents||(M.availability_completion.form.addedEvents=!0,o.one(".availability-field").delegate("change",function(){M.core_availability.form.update()},".availability_completion select")),l},M.availability_completion.form.fillValue=function(e,i){e.cm=parseInt(i.one("select[name=cm]").get("value"),10),e.e=parseInt(i.one("select[name=e]").get("value"),10)},M.availability_completion.form.fillErrors=function(i,e){var l=parseInt(e.one("select[name=cm]").get("value"),10);0===l&&i.push("availability_completion:error_selectcmid"),2!==(e=parseInt(e.one("select[name=e]").get("value"),10))&&3!==e||this.cms.forEach(function(e){e.id===l&&null===e.completiongradeitemnumber&&i.push("availability_completion:error_selectcmidpassfail")})}},"@VERSION@",{requires:["base","node","event","moodle-core_availability-form"]});
YUI.add("moodle-availability_completion-form",function(o,e){M.availability_completion=M.availability_completion||{},M.availability_completion.form=o.Object(M.core_availability.plugin),M.availability_completion.form.initInner=function(e){this.cms=e},M.availability_completion.form.getNode=function(e){for(var i,l,t='<span class="col-form-label pe-3"> '+M.util.get_string("title","availability_completion")+'</span> <span class="availability-group mb-3"><label><span class="accesshide">'+M.util.get_string("label_cm","availability_completion")+' </span><select class="form-select" name="cm" title="'+M.util.get_string("label_cm","availability_completion")+'"><option value="0">'+M.util.get_string("choosedots","moodle")+"</option>",a=0;a<this.cms.length;a++)t+='<option value="'+(i=this.cms[a]).id+'">'+i.name+"</option>";return t+='</select></label> <label><span class="accesshide">'+M.util.get_string("label_completion","availability_completion")+' </span><select class="form-select" name="e" title="'+M.util.get_string("label_completion","availability_completion")+'"><option value="1">'+M.util.get_string("option_complete","availability_completion")+'</option><option value="0">'+M.util.get_string("option_incomplete","availability_completion")+'</option><option value="2">'+M.util.get_string("option_pass","availability_completion")+'</option><option value="3">'+M.util.get_string("option_fail","availability_completion")+"</option></select></label></span>",l=o.Node.create('<span class="d-flex flex-wrap align-items-center">'+t+"</span>"),e.cm!==undefined&&l.one("select[name=cm] > option[value="+e.cm+"]")&&l.one("select[name=cm]").set("value",""+e.cm),e.e!==undefined&&l.one("select[name=e]").set("value",""+e.e),M.availability_completion.form.addedEvents||(M.availability_completion.form.addedEvents=!0,o.one(".availability-field").delegate("change",function(){M.core_availability.form.update()},".availability_completion select")),l},M.availability_completion.form.fillValue=function(e,i){e.cm=parseInt(i.one("select[name=cm]").get("value"),10),e.e=parseInt(i.one("select[name=e]").get("value"),10)},M.availability_completion.form.fillErrors=function(i,e){var l=parseInt(e.one("select[name=cm]").get("value"),10);0===l&&i.push("availability_completion:error_selectcmid"),2!==(e=parseInt(e.one("select[name=e]").get("value"),10))&&3!==e||this.cms.forEach(function(e){e.id===l&&null===e.completiongradeitemnumber&&i.push("availability_completion:error_selectcmidpassfail")})}},"@VERSION@",{requires:["base","node","event","moodle-core_availability-form"]});

View file

@ -28,7 +28,7 @@ M.availability_completion.form.getNode = function(json) {
var html = '<span class="col-form-label pe-3"> ' + M.util.get_string('title', 'availability_completion') + '</span>' +
' <span class="availability-group mb-3"><label>' +
'<span class="accesshide">' + M.util.get_string('label_cm', 'availability_completion') + ' </span>' +
'<select class="custom-select" name="cm" title="' + M.util.get_string('label_cm', 'availability_completion') + '">' +
'<select class="form-select" name="cm" title="' + M.util.get_string('label_cm', 'availability_completion') + '">' +
'<option value="0">' + M.util.get_string('choosedots', 'moodle') + '</option>';
for (var i = 0; i < this.cms.length; i++) {
var cm = this.cms[i];
@ -37,7 +37,7 @@ M.availability_completion.form.getNode = function(json) {
}
html += '</select></label> <label><span class="accesshide">' +
M.util.get_string('label_completion', 'availability_completion') +
' </span><select class="custom-select" ' +
' </span><select class="form-select" ' +
'name="e" title="' + M.util.get_string('label_completion', 'availability_completion') + '">' +
'<option value="1">' + M.util.get_string('option_complete', 'availability_completion') + '</option>' +
'<option value="0">' + M.util.get_string('option_incomplete', 'availability_completion') + '</option>' +

View file

@ -26,7 +26,7 @@ M.availability_completion.form.getNode = function(json) {
var html = '<span class="col-form-label pe-3"> ' + M.util.get_string('title', 'availability_completion') + '</span>' +
' <span class="availability-group mb-3"><label>' +
'<span class="accesshide">' + M.util.get_string('label_cm', 'availability_completion') + ' </span>' +
'<select class="custom-select" name="cm" title="' + M.util.get_string('label_cm', 'availability_completion') + '">' +
'<select class="form-select" name="cm" title="' + M.util.get_string('label_cm', 'availability_completion') + '">' +
'<option value="0">' + M.util.get_string('choosedots', 'moodle') + '</option>';
for (var i = 0; i < this.cms.length; i++) {
var cm = this.cms[i];
@ -35,7 +35,7 @@ M.availability_completion.form.getNode = function(json) {
}
html += '</select></label> <label><span class="accesshide">' +
M.util.get_string('label_completion', 'availability_completion') +
' </span><select class="custom-select" ' +
' </span><select class="form-select" ' +
'name="e" title="' + M.util.get_string('label_completion', 'availability_completion') + '">' +
'<option value="1">' + M.util.get_string('option_complete', 'availability_completion') + '</option>' +
'<option value="0">' + M.util.get_string('option_incomplete', 'availability_completion') + '</option>' +

View file

@ -151,7 +151,7 @@ class frontend extends \core_availability\frontend {
// NOTE: The fields need to have these weird names in order that they
// match the standard Moodle form control, otherwise the date selector
// won't find them.
$html .= \html_writer::start_tag('select', array('name' => 'x[' . $field . ']', 'class' => 'custom-select'));
$html .= \html_writer::start_tag('select', ['name' => 'x[' . $field . ']', 'class' => 'form-select']);
foreach ($options as $key => $value) {
$params = array('value' => $key);
if ($current[$field] == $key) {

View file

@ -32,7 +32,7 @@ M.availability_date.form.getNode = function(json) {
var html = '<span class="col-form-label pe-3">' +
M.util.get_string('direction_before', 'availability_date') + '</span> <span class="availability-group">' +
'<label><span class="accesshide">' + M.util.get_string('direction_label', 'availability_date') + ' </span>' +
'<select name="direction" class="custom-select">' +
'<select name="direction" class="form-select">' +
'<option value="&gt;=">' + M.util.get_string('direction_from', 'availability_date') + '</option>' +
'<option value="&lt;">' + M.util.get_string('direction_until', 'availability_date') + '</option>' +
'</select></label></span> ' + this.html;

View file

@ -1 +1 @@
YUI.add("moodle-availability_date-form",function(o,e){M.availability_date=M.availability_date||{},M.availability_date.form=o.Object(M.core_availability.plugin),M.availability_date.form.initInner=function(e,a){this.html=e,this.defaultTime=a},M.availability_date.form.getNode=function(e){var t,i,a='<span class="col-form-label pe-3">'+M.util.get_string("direction_before","availability_date")+'</span> <span class="availability-group"><label><span class="accesshide">'+M.util.get_string("direction_label","availability_date")+' </span><select name="direction" class="custom-select"><option value="&gt;=">'+M.util.get_string("direction_from","availability_date")+'</option><option value="&lt;">'+M.util.get_string("direction_until","availability_date")+"</option></select></label></span> "+this.html,l=o.Node.create("<span>"+a+"</span>");return e.t!==undefined?(l.setData("time",e.t),l.all("select:not([name=direction])").each(function(e){e.set("disabled",!0)}),a=M.cfg.wwwroot+"/availability/condition/date/ajax.php?action=fromtime&time="+e.t,o.io(a,{on:{success:function(e,a){var t,i,n=o.JSON.parse(a.responseText);for(t in n)(i=l.one("select[name=x\\["+t+"\\]]")).set("value",""+n[t]),i.set("disabled",!1)},failure:function(){window.alert(M.util.get_string("ajaxerror","availability_date"))}}})):l.setData("time",this.defaultTime),e.nodeUID===undefined&&(a=new Date,e.nodeUID=a.getTime()),l.setData("nodeUID",e.nodeUID),e.d!==undefined&&l.one("select[name=direction]").set("value",e.d),M.availability_date.form.addedEvents||(M.availability_date.form.addedEvents=!0,(a=o.one(".availability-field")).delegate("change",function(){M.core_availability.form.update()},".availability_date select[name=direction]"),a.delegate("change",function(){M.availability_date.form.updateTime(this.ancestor("span.availability_date"))},".availability_date select:not([name=direction])")),l.one("a[href=#]")&&(M.form.dateselector.init_single_date_selector(l),t=l.one("select[name=x\\[year\\]]"),i=t.set,t.set=function(e,a){i.call(t,e,a),"selectedIndex"===e&&setTimeout(function(){M.availability_date.form.updateTime(l)},0)}),l},M.availability_date.form.updateTime=function(t){var e=M.cfg.wwwroot+"/availability/condition/date/ajax.php?action=totime&year="+t.one("select[name=x\\[year\\]]").get("value")+"&month="+t.one("select[name=x\\[month\\]]").get("value")+"&day="+t.one("select[name=x\\[day\\]]").get("value")+"&hour="+t.one("select[name=x\\[hour\\]]").get("value")+"&minute="+t.one("select[name=x\\[minute\\]]").get("value");o.io(e,{on:{success:function(e,a){t.setData("time",a.responseText),M.core_availability.form.update()},failure:function(){window.alert(M.util.get_string("ajaxerror","availability_date"))}}})},M.availability_date.form.fillValue=function(e,a){e.d=a.one("select[name=direction]").get("value"),e.t=parseInt(a.getData("time"),10),e.nodeUID=a.getData("nodeUID")},M.availability_date.form.findAllDateSiblings=function(e,d){var r,c=function(e){var a,t,i,n=[],l=!1,o=e.op!==undefined?e.op:null;if(e.c!==undefined){for(i=e.c,a=0;a<i.length;a++){if((r=i.at(a)).type===undefined&&(t=c(r)))return t;"date"===r.type&&(d===r.nodeUID?l=!0:"&"===o&&n.push(r))}if(l)return n}return null};return c(e)},M.availability_date.form.checkConditionDate=function(e){var a=!1,t=e.getData("nodeUID"),i=e.one("select[name=direction]").get("value"),n=parseInt(e.getData("time"),10),e=M.availability_date.form.findAllDateSiblings(M.core_availability.form.rootList.getValue(),t);return e&&e.forEach(function(e){return"<"===e.d?">="===i&&n>=e.t&&(a=!0):"<"===i&&n<=e.t&&(a=!0),a}),a},M.availability_date.form.fillErrors=function(e,a){M.availability_date.form.checkConditionDate(a)&&e.push("availability_date:error_dateconflict")}},"@VERSION@",{requires:["base","node","event","io","moodle-core_availability-form"]});
YUI.add("moodle-availability_date-form",function(o,e){M.availability_date=M.availability_date||{},M.availability_date.form=o.Object(M.core_availability.plugin),M.availability_date.form.initInner=function(e,a){this.html=e,this.defaultTime=a},M.availability_date.form.getNode=function(e){var t,i,a='<span class="col-form-label pe-3">'+M.util.get_string("direction_before","availability_date")+'</span> <span class="availability-group"><label><span class="accesshide">'+M.util.get_string("direction_label","availability_date")+' </span><select name="direction" class="form-select"><option value="&gt;=">'+M.util.get_string("direction_from","availability_date")+'</option><option value="&lt;">'+M.util.get_string("direction_until","availability_date")+"</option></select></label></span> "+this.html,l=o.Node.create("<span>"+a+"</span>");return e.t!==undefined?(l.setData("time",e.t),l.all("select:not([name=direction])").each(function(e){e.set("disabled",!0)}),a=M.cfg.wwwroot+"/availability/condition/date/ajax.php?action=fromtime&time="+e.t,o.io(a,{on:{success:function(e,a){var t,i,n=o.JSON.parse(a.responseText);for(t in n)(i=l.one("select[name=x\\["+t+"\\]]")).set("value",""+n[t]),i.set("disabled",!1)},failure:function(){window.alert(M.util.get_string("ajaxerror","availability_date"))}}})):l.setData("time",this.defaultTime),e.nodeUID===undefined&&(a=new Date,e.nodeUID=a.getTime()),l.setData("nodeUID",e.nodeUID),e.d!==undefined&&l.one("select[name=direction]").set("value",e.d),M.availability_date.form.addedEvents||(M.availability_date.form.addedEvents=!0,(a=o.one(".availability-field")).delegate("change",function(){M.core_availability.form.update()},".availability_date select[name=direction]"),a.delegate("change",function(){M.availability_date.form.updateTime(this.ancestor("span.availability_date"))},".availability_date select:not([name=direction])")),l.one("a[href=#]")&&(M.form.dateselector.init_single_date_selector(l),t=l.one("select[name=x\\[year\\]]"),i=t.set,t.set=function(e,a){i.call(t,e,a),"selectedIndex"===e&&setTimeout(function(){M.availability_date.form.updateTime(l)},0)}),l},M.availability_date.form.updateTime=function(t){var e=M.cfg.wwwroot+"/availability/condition/date/ajax.php?action=totime&year="+t.one("select[name=x\\[year\\]]").get("value")+"&month="+t.one("select[name=x\\[month\\]]").get("value")+"&day="+t.one("select[name=x\\[day\\]]").get("value")+"&hour="+t.one("select[name=x\\[hour\\]]").get("value")+"&minute="+t.one("select[name=x\\[minute\\]]").get("value");o.io(e,{on:{success:function(e,a){t.setData("time",a.responseText),M.core_availability.form.update()},failure:function(){window.alert(M.util.get_string("ajaxerror","availability_date"))}}})},M.availability_date.form.fillValue=function(e,a){e.d=a.one("select[name=direction]").get("value"),e.t=parseInt(a.getData("time"),10),e.nodeUID=a.getData("nodeUID")},M.availability_date.form.findAllDateSiblings=function(e,d){var r,c=function(e){var a,t,i,n=[],l=!1,o=e.op!==undefined?e.op:null;if(e.c!==undefined){for(i=e.c,a=0;a<i.length;a++){if((r=i.at(a)).type===undefined&&(t=c(r)))return t;"date"===r.type&&(d===r.nodeUID?l=!0:"&"===o&&n.push(r))}if(l)return n}return null};return c(e)},M.availability_date.form.checkConditionDate=function(e){var a=!1,t=e.getData("nodeUID"),i=e.one("select[name=direction]").get("value"),n=parseInt(e.getData("time"),10),e=M.availability_date.form.findAllDateSiblings(M.core_availability.form.rootList.getValue(),t);return e&&e.forEach(function(e){return"<"===e.d?">="===i&&n>=e.t&&(a=!0):"<"===i&&n<=e.t&&(a=!0),a}),a},M.availability_date.form.fillErrors=function(e,a){M.availability_date.form.checkConditionDate(a)&&e.push("availability_date:error_dateconflict")}},"@VERSION@",{requires:["base","node","event","io","moodle-core_availability-form"]});

View file

@ -32,7 +32,7 @@ M.availability_date.form.getNode = function(json) {
var html = '<span class="col-form-label pe-3">' +
M.util.get_string('direction_before', 'availability_date') + '</span> <span class="availability-group">' +
'<label><span class="accesshide">' + M.util.get_string('direction_label', 'availability_date') + ' </span>' +
'<select name="direction" class="custom-select">' +
'<select name="direction" class="form-select">' +
'<option value="&gt;=">' + M.util.get_string('direction_from', 'availability_date') + '</option>' +
'<option value="&lt;">' + M.util.get_string('direction_until', 'availability_date') + '</option>' +
'</select></label></span> ' + this.html;

View file

@ -30,7 +30,7 @@ M.availability_date.form.getNode = function(json) {
var html = '<span class="col-form-label pe-3">' +
M.util.get_string('direction_before', 'availability_date') + '</span> <span class="availability-group">' +
'<label><span class="accesshide">' + M.util.get_string('direction_label', 'availability_date') + ' </span>' +
'<select name="direction" class="custom-select">' +
'<select name="direction" class="form-select">' +
'<option value="&gt;=">' + M.util.get_string('direction_from', 'availability_date') + '</option>' +
'<option value="&lt;">' + M.util.get_string('direction_until', 'availability_date') + '</option>' +
'</select></label></span> ' + this.html;

View file

@ -39,7 +39,7 @@ M.availability_grade.form.getNode = function(json) {
// Create HTML structure.
var html = '<label class="mb-3"><span class="pe-3">' + M.util.get_string('title', 'availability_grade') + '</span> ' +
'<span class="availability-group">' +
'<select name="id" class="custom-select"><option value="0">' + M.util.get_string('choosedots', 'moodle') + '</option>';
'<select name="id" class="form-select"><option value="0">' + M.util.get_string('choosedots', 'moodle') + '</option>';
for (var i = 0; i < this.grades.length; i++) {
var grade = this.grades[i];
// String has already been escaped using format_string.

View file

@ -1 +1 @@
YUI.add("moodle-availability_grade-form",function(r,a){M.availability_grade=M.availability_grade||{},M.availability_grade.form=r.Object(M.core_availability.plugin),M.availability_grade.form.grades=null,M.availability_grade.form.initInner=function(a){this.grades=a,this.nodesSoFar=0},M.availability_grade.form.getNode=function(a){var e,i,l,t,n;for(this.nodesSoFar++,e='<label class="mb-3"><span class="pe-3">'+M.util.get_string("title","availability_grade")+'</span> <span class="availability-group"><select name="id" class="custom-select"><option value="0">'+M.util.get_string("choosedots","moodle")+"</option>",i=0;i<this.grades.length;i++)e+='<option value="'+(l=this.grades[i]).id+'">'+l.name+"</option>";return e+='</select></span></label> <br><span class="availability-group mb-3"><label><input type="checkbox" class="form-check-input position-static mt-0 mx-1" name="min"/>'+M.util.get_string("option_min","availability_grade")+'</label> <label><span class="accesshide">'+M.util.get_string("label_min","availability_grade")+'</span><input type="text" class="form-control mx-1" name="minval" title="'+M.util.get_string("label_min","availability_grade")+'"/></label>%</span><br><span class="availability-group mb-3"><label><input type="checkbox" class="form-check-input position-static mt-0 mx-1" name="max"/>'+M.util.get_string("option_max","availability_grade")+'</label> <label><span class="accesshide">'+M.util.get_string("label_max","availability_grade")+'</span><input type="text" class="form-control mx-1" name="maxval" title="'+M.util.get_string("label_max","availability_grade")+'"/></label>%</span>',t=r.Node.create('<div class="d-inline-block d-flex flex-wrap align-items-center">'+e+"</div>"),a.id!==undefined&&t.one("select[name=id] > option[value="+a.id+"]")&&t.one("select[name=id]").set("value",""+a.id),a.min!==undefined&&(t.one("input[name=min]").set("checked",!0),t.one("input[name=minval]").set("value",a.min)),a.max!==undefined&&(t.one("input[name=max]").set("checked",!0),t.one("input[name=maxval]").set("value",a.max)),n=function(a,e){var i=a.ancestor("label").next("label").one("input"),a=a.get("checked");return i.set("disabled",!a),e&&a&&i.focus(),a},t.all("input[type=checkbox]").each(n),M.availability_grade.form.addedEvents||(M.availability_grade.form.addedEvents=!0,(a=r.one(".availability-field")).delegate("change",function(){M.core_availability.form.update()},".availability_grade select[name=id]"),a.delegate("click",function(){n(this,!0),M.core_availability.form.update()},".availability_grade input[type=checkbox]"),a.delegate("valuechange",function(){M.core_availability.form.update()},".availability_grade input[type=text]")),t},M.availability_grade.form.fillValue=function(a,e){a.id=parseInt(e.one("select[name=id]").get("value"),10),e.one("input[name=min]").get("checked")&&(a.min=this.getValue("minval",e)),e.one("input[name=max]").get("checked")&&(a.max=this.getValue("maxval",e))},M.availability_grade.form.getValue=function(a,e){a=e.one("input[name="+a+"]").get("value");return!/^[0-9]+([.,][0-9]+)?$/.test(a)||(e=parseFloat(a.replace(",",".")))<0||100<e?a:e},M.availability_grade.form.fillErrors=function(a,e){var i={};this.fillValue(i,e),0===i.id&&a.push("availability_grade:error_selectgradeid"),i.min!==undefined&&"string"==typeof i.min||i.max!==undefined&&"string"==typeof i.max?a.push("availability_grade:error_invalidnumber"):i.min!==undefined&&i.max!==undefined&&i.max<=i.min&&a.push("availability_grade:error_backwardrange")}},"@VERSION@",{requires:["base","node","event","moodle-core_availability-form"]});
YUI.add("moodle-availability_grade-form",function(r,a){M.availability_grade=M.availability_grade||{},M.availability_grade.form=r.Object(M.core_availability.plugin),M.availability_grade.form.grades=null,M.availability_grade.form.initInner=function(a){this.grades=a,this.nodesSoFar=0},M.availability_grade.form.getNode=function(a){var e,i,l,t,n;for(this.nodesSoFar++,e='<label class="mb-3"><span class="pe-3">'+M.util.get_string("title","availability_grade")+'</span> <span class="availability-group"><select name="id" class="form-select"><option value="0">'+M.util.get_string("choosedots","moodle")+"</option>",i=0;i<this.grades.length;i++)e+='<option value="'+(l=this.grades[i]).id+'">'+l.name+"</option>";return e+='</select></span></label> <br><span class="availability-group mb-3"><label><input type="checkbox" class="form-check-input position-static mt-0 mx-1" name="min"/>'+M.util.get_string("option_min","availability_grade")+'</label> <label><span class="accesshide">'+M.util.get_string("label_min","availability_grade")+'</span><input type="text" class="form-control mx-1" name="minval" title="'+M.util.get_string("label_min","availability_grade")+'"/></label>%</span><br><span class="availability-group mb-3"><label><input type="checkbox" class="form-check-input position-static mt-0 mx-1" name="max"/>'+M.util.get_string("option_max","availability_grade")+'</label> <label><span class="accesshide">'+M.util.get_string("label_max","availability_grade")+'</span><input type="text" class="form-control mx-1" name="maxval" title="'+M.util.get_string("label_max","availability_grade")+'"/></label>%</span>',t=r.Node.create('<div class="d-inline-block d-flex flex-wrap align-items-center">'+e+"</div>"),a.id!==undefined&&t.one("select[name=id] > option[value="+a.id+"]")&&t.one("select[name=id]").set("value",""+a.id),a.min!==undefined&&(t.one("input[name=min]").set("checked",!0),t.one("input[name=minval]").set("value",a.min)),a.max!==undefined&&(t.one("input[name=max]").set("checked",!0),t.one("input[name=maxval]").set("value",a.max)),n=function(a,e){var i=a.ancestor("label").next("label").one("input"),a=a.get("checked");return i.set("disabled",!a),e&&a&&i.focus(),a},t.all("input[type=checkbox]").each(n),M.availability_grade.form.addedEvents||(M.availability_grade.form.addedEvents=!0,(a=r.one(".availability-field")).delegate("change",function(){M.core_availability.form.update()},".availability_grade select[name=id]"),a.delegate("click",function(){n(this,!0),M.core_availability.form.update()},".availability_grade input[type=checkbox]"),a.delegate("valuechange",function(){M.core_availability.form.update()},".availability_grade input[type=text]")),t},M.availability_grade.form.fillValue=function(a,e){a.id=parseInt(e.one("select[name=id]").get("value"),10),e.one("input[name=min]").get("checked")&&(a.min=this.getValue("minval",e)),e.one("input[name=max]").get("checked")&&(a.max=this.getValue("maxval",e))},M.availability_grade.form.getValue=function(a,e){a=e.one("input[name="+a+"]").get("value");return!/^[0-9]+([.,][0-9]+)?$/.test(a)||(e=parseFloat(a.replace(",",".")))<0||100<e?a:e},M.availability_grade.form.fillErrors=function(a,e){var i={};this.fillValue(i,e),0===i.id&&a.push("availability_grade:error_selectgradeid"),i.min!==undefined&&"string"==typeof i.min||i.max!==undefined&&"string"==typeof i.max?a.push("availability_grade:error_invalidnumber"):i.min!==undefined&&i.max!==undefined&&i.max<=i.min&&a.push("availability_grade:error_backwardrange")}},"@VERSION@",{requires:["base","node","event","moodle-core_availability-form"]});

View file

@ -39,7 +39,7 @@ M.availability_grade.form.getNode = function(json) {
// Create HTML structure.
var html = '<label class="mb-3"><span class="pe-3">' + M.util.get_string('title', 'availability_grade') + '</span> ' +
'<span class="availability-group">' +
'<select name="id" class="custom-select"><option value="0">' + M.util.get_string('choosedots', 'moodle') + '</option>';
'<select name="id" class="form-select"><option value="0">' + M.util.get_string('choosedots', 'moodle') + '</option>';
for (var i = 0; i < this.grades.length; i++) {
var grade = this.grades[i];
// String has already been escaped using format_string.

View file

@ -37,7 +37,7 @@ M.availability_grade.form.getNode = function(json) {
// Create HTML structure.
var html = '<label class="mb-3"><span class="pe-3">' + M.util.get_string('title', 'availability_grade') + '</span> ' +
'<span class="availability-group">' +
'<select name="id" class="custom-select"><option value="0">' + M.util.get_string('choosedots', 'moodle') + '</option>';
'<select name="id" class="form-select"><option value="0">' + M.util.get_string('choosedots', 'moodle') + '</option>';
for (var i = 0; i < this.grades.length; i++) {
var grade = this.grades[i];
// String has already been escaped using format_string.

View file

@ -35,7 +35,7 @@ M.availability_group.form.getNode = function(json) {
// Create HTML structure.
var html = '<label><span class="pe-3">' + M.util.get_string('title', 'availability_group') + '</span> ' +
'<span class="availability-group">' +
'<select name="id" class="custom-select">' +
'<select name="id" class="form-select">' +
'<option value="choose">' + M.util.get_string('choosedots', 'moodle') + '</option>' +
'<option value="any">' + M.util.get_string('anygroup', 'availability_group') + '</option>';
for (var i = 0; i < this.groups.length; i++) {

View file

@ -1 +1 @@
YUI.add("moodle-availability_group-form",function(r,i){M.availability_group=M.availability_group||{},M.availability_group.form=r.Object(M.core_availability.plugin),M.availability_group.form.groups=null,M.availability_group.form.initInner=function(i){this.groups=i},M.availability_group.form.getNode=function(i){for(var a,e,t,l,o='<label><span class="pe-3">'+M.util.get_string("title","availability_group")+'</span> <span class="availability-group"><select name="id" class="custom-select"><option value="choose">'+M.util.get_string("choosedots","moodle")+'</option><option value="any">'+M.util.get_string("anygroup","availability_group")+"</option>",n=0;n<this.groups.length;n++)o+='<option value="'+(a=this.groups[n]).id+'" data-visibility="'+a.visibility+'">'+a.name+"</option>";return(t=(e=r.Node.create('<span class="d-flex flex-wrap align-items-center">'+(o+="</select></span></label>")+"</span>")).one("select[name=id]")).on("change",function(i){var a=i.target.get("value"),a=i.target.one("option[value="+a+"]").get("dataset").visibility,i=0<a?"availability:privateRuleSet":"availability:privateRuleUnset";e.fire(i,{plugin:"group"})}),i.creating===undefined&&(i.id!==undefined?(l=t.one("option[value="+i.id+"]"))&&(t.set("value",""+i.id),0<l.get("dataset").visibility&&window.setTimeout(function(){e.fire("availability:privateRuleSet",{plugin:"group"})},0)):i.id===undefined&&e.one("select[name=id]").set("value","any")),M.availability_group.form.addedEvents||(M.availability_group.form.addedEvents=!0,r.one(".availability-field").delegate("change",function(){M.core_availability.form.update()},".availability_group select")),e},M.availability_group.form.fillValue=function(i,a){a=a.one("select[name=id]").get("value");"choose"===a?i.id="choose":"any"!==a&&(i.id=parseInt(a,10))},M.availability_group.form.fillErrors=function(i,a){var e={};this.fillValue(e,a),e.id&&"choose"===e.id&&i.push("availability_group:error_selectgroup")}},"@VERSION@",{requires:["base","node","event","moodle-core_availability-form"]});
YUI.add("moodle-availability_group-form",function(r,i){M.availability_group=M.availability_group||{},M.availability_group.form=r.Object(M.core_availability.plugin),M.availability_group.form.groups=null,M.availability_group.form.initInner=function(i){this.groups=i},M.availability_group.form.getNode=function(i){for(var a,e,t,l,o='<label><span class="pe-3">'+M.util.get_string("title","availability_group")+'</span> <span class="availability-group"><select name="id" class="form-select"><option value="choose">'+M.util.get_string("choosedots","moodle")+'</option><option value="any">'+M.util.get_string("anygroup","availability_group")+"</option>",n=0;n<this.groups.length;n++)o+='<option value="'+(a=this.groups[n]).id+'" data-visibility="'+a.visibility+'">'+a.name+"</option>";return(t=(e=r.Node.create('<span class="d-flex flex-wrap align-items-center">'+(o+="</select></span></label>")+"</span>")).one("select[name=id]")).on("change",function(i){var a=i.target.get("value"),a=i.target.one("option[value="+a+"]").get("dataset").visibility,i=0<a?"availability:privateRuleSet":"availability:privateRuleUnset";e.fire(i,{plugin:"group"})}),i.creating===undefined&&(i.id!==undefined?(l=t.one("option[value="+i.id+"]"))&&(t.set("value",""+i.id),0<l.get("dataset").visibility&&window.setTimeout(function(){e.fire("availability:privateRuleSet",{plugin:"group"})},0)):i.id===undefined&&e.one("select[name=id]").set("value","any")),M.availability_group.form.addedEvents||(M.availability_group.form.addedEvents=!0,r.one(".availability-field").delegate("change",function(){M.core_availability.form.update()},".availability_group select")),e},M.availability_group.form.fillValue=function(i,a){a=a.one("select[name=id]").get("value");"choose"===a?i.id="choose":"any"!==a&&(i.id=parseInt(a,10))},M.availability_group.form.fillErrors=function(i,a){var e={};this.fillValue(e,a),e.id&&"choose"===e.id&&i.push("availability_group:error_selectgroup")}},"@VERSION@",{requires:["base","node","event","moodle-core_availability-form"]});

View file

@ -35,7 +35,7 @@ M.availability_group.form.getNode = function(json) {
// Create HTML structure.
var html = '<label><span class="pe-3">' + M.util.get_string('title', 'availability_group') + '</span> ' +
'<span class="availability-group">' +
'<select name="id" class="custom-select">' +
'<select name="id" class="form-select">' +
'<option value="choose">' + M.util.get_string('choosedots', 'moodle') + '</option>' +
'<option value="any">' + M.util.get_string('anygroup', 'availability_group') + '</option>';
for (var i = 0; i < this.groups.length; i++) {

View file

@ -33,7 +33,7 @@ M.availability_group.form.getNode = function(json) {
// Create HTML structure.
var html = '<label><span class="pe-3">' + M.util.get_string('title', 'availability_group') + '</span> ' +
'<span class="availability-group">' +
'<select name="id" class="custom-select">' +
'<select name="id" class="form-select">' +
'<option value="choose">' + M.util.get_string('choosedots', 'moodle') + '</option>' +
'<option value="any">' + M.util.get_string('anygroup', 'availability_group') + '</option>';
for (var i = 0; i < this.groups.length; i++) {

View file

@ -35,7 +35,7 @@ M.availability_grouping.form.getNode = function(json) {
// Create HTML structure.
var html = '<label><span class="pe-3">' + M.util.get_string('title', 'availability_grouping') + '</span> ' +
'<span class="availability-group">' +
'<select name="id" class="custom-select">' +
'<select name="id" class="form-select">' +
'<option value="choose">' + M.util.get_string('choosedots', 'moodle') + '</option>';
for (var i = 0; i < this.groupings.length; i++) {
var grouping = this.groupings[i];

View file

@ -1 +1 @@
YUI.add("moodle-availability_grouping-form",function(n,i){M.availability_grouping=M.availability_grouping||{},M.availability_grouping.form=n.Object(M.core_availability.plugin),M.availability_grouping.form.groupings=null,M.availability_grouping.form.initInner=function(i){this.groupings=i},M.availability_grouping.form.getNode=function(i){for(var a,e,l='<label><span class="pe-3">'+M.util.get_string("title","availability_grouping")+'</span> <span class="availability-group"><select name="id" class="custom-select"><option value="choose">'+M.util.get_string("choosedots","moodle")+"</option>",o=0;o<this.groupings.length;o++)l+='<option value="'+(a=this.groupings[o]).id+'">'+a.name+"</option>";return e=n.Node.create('<span class="d-flex flex-wrap align-items-center">'+(l+="</select></span></label>")+"</span>"),i.id!==undefined&&e.one("select[name=id] > option[value="+i.id+"]")&&e.one("select[name=id]").set("value",""+i.id),M.availability_grouping.form.addedEvents||(M.availability_grouping.form.addedEvents=!0,n.one(".availability-field").delegate("change",function(){M.core_availability.form.update()},".availability_grouping select")),e},M.availability_grouping.form.fillValue=function(i,a){a=a.one("select[name=id]").get("value");i.id="choose"===a?"choose":parseInt(a,10)},M.availability_grouping.form.fillErrors=function(i,a){var e={};this.fillValue(e,a),"choose"===e.id&&i.push("availability_grouping:error_selectgrouping")}},"@VERSION@",{requires:["base","node","event","moodle-core_availability-form"]});
YUI.add("moodle-availability_grouping-form",function(n,i){M.availability_grouping=M.availability_grouping||{},M.availability_grouping.form=n.Object(M.core_availability.plugin),M.availability_grouping.form.groupings=null,M.availability_grouping.form.initInner=function(i){this.groupings=i},M.availability_grouping.form.getNode=function(i){for(var a,e,l='<label><span class="pe-3">'+M.util.get_string("title","availability_grouping")+'</span> <span class="availability-group"><select name="id" class="form-select"><option value="choose">'+M.util.get_string("choosedots","moodle")+"</option>",o=0;o<this.groupings.length;o++)l+='<option value="'+(a=this.groupings[o]).id+'">'+a.name+"</option>";return e=n.Node.create('<span class="d-flex flex-wrap align-items-center">'+(l+="</select></span></label>")+"</span>"),i.id!==undefined&&e.one("select[name=id] > option[value="+i.id+"]")&&e.one("select[name=id]").set("value",""+i.id),M.availability_grouping.form.addedEvents||(M.availability_grouping.form.addedEvents=!0,n.one(".availability-field").delegate("change",function(){M.core_availability.form.update()},".availability_grouping select")),e},M.availability_grouping.form.fillValue=function(i,a){a=a.one("select[name=id]").get("value");i.id="choose"===a?"choose":parseInt(a,10)},M.availability_grouping.form.fillErrors=function(i,a){var e={};this.fillValue(e,a),"choose"===e.id&&i.push("availability_grouping:error_selectgrouping")}},"@VERSION@",{requires:["base","node","event","moodle-core_availability-form"]});

View file

@ -35,7 +35,7 @@ M.availability_grouping.form.getNode = function(json) {
// Create HTML structure.
var html = '<label><span class="pe-3">' + M.util.get_string('title', 'availability_grouping') + '</span> ' +
'<span class="availability-group">' +
'<select name="id" class="custom-select">' +
'<select name="id" class="form-select">' +
'<option value="choose">' + M.util.get_string('choosedots', 'moodle') + '</option>';
for (var i = 0; i < this.groupings.length; i++) {
var grouping = this.groupings[i];

View file

@ -33,7 +33,7 @@ M.availability_grouping.form.getNode = function(json) {
// Create HTML structure.
var html = '<label><span class="pe-3">' + M.util.get_string('title', 'availability_grouping') + '</span> ' +
'<span class="availability-group">' +
'<select name="id" class="custom-select">' +
'<select name="id" class="form-select">' +
'<option value="choose">' + M.util.get_string('choosedots', 'moodle') + '</option>';
for (var i = 0; i < this.groupings.length; i++) {
var grouping = this.groupings[i];

View file

@ -37,7 +37,7 @@ M.availability_profile.form.getNode = function(json) {
// Create HTML structure.
var html = '<span class="availability-group"><label><span class="pe-3">' +
M.util.get_string('conditiontitle', 'availability_profile') + '</span> ' +
'<select name="field" class="custom-select">' +
'<select name="field" class="form-select">' +
'<option value="choose">' + M.util.get_string('choosedots', 'moodle') + '</option>';
var fieldInfo;
for (var i = 0; i < this.standardFields.length; i++) {
@ -52,7 +52,7 @@ M.availability_profile.form.getNode = function(json) {
}
html += '</select></label> <label><span class="accesshide">' + M.util.get_string('label_operator', 'availability_profile') +
' </span><select name="op" title="' + M.util.get_string('label_operator', 'availability_profile') + '"' +
' class="custom-select">';
' class="form-select">';
var operators = ['isequalto', 'contains', 'doesnotcontain', 'startswith', 'endswith',
'isempty', 'isnotempty'];
for (i = 0; i < operators.length; i++) {

View file

@ -1 +1 @@
YUI.add("moodle-availability_profile-form",function(n,e){M.availability_profile=M.availability_profile||{},M.availability_profile.form=n.Object(M.core_availability.plugin),M.availability_profile.form.profiles=null,M.availability_profile.form.initInner=function(e,i){this.standardFields=e,this.customFields=i},M.availability_profile.form.getNode=function(e){for(var i,l,a,t,o='<span class="availability-group"><label><span class="pe-3">'+M.util.get_string("conditiontitle","availability_profile")+'</span> <select name="field" class="custom-select"><option value="choose">'+M.util.get_string("choosedots","moodle")+"</option>",s=0;s<this.standardFields.length;s++)o+='<option value="sf_'+(i=this.standardFields[s]).field+'">'+i.display+"</option>";for(s=0;s<this.customFields.length;s++)o+='<option value="cf_'+(i=this.customFields[s]).field+'">'+i.display+"</option>";for(o+='</select></label> <label><span class="accesshide">'+M.util.get_string("label_operator","availability_profile")+' </span><select name="op" title="'+M.util.get_string("label_operator","availability_profile")+'" class="custom-select">',l=["isequalto","contains","doesnotcontain","startswith","endswith","isempty","isnotempty"],s=0;s<l.length;s++)o+='<option value="'+l[s]+'">'+M.util.get_string("op_"+l[s],"availability_profile")+"</option>";return o+='</select></label> <label><span class="accesshide">'+M.util.get_string("label_value","availability_profile")+'</span><input name="value" type="text" class="form-control" style="width: 10em" title="'+M.util.get_string("label_value","availability_profile")+'"/></label></span>',a=n.Node.create('<span class="d-flex flex-wrap align-items-center">'+o+"</span>"),e.sf!==undefined&&a.one("select[name=field] > option[value=sf_"+e.sf+"]")?a.one("select[name=field]").set("value","sf_"+e.sf):e.cf!==undefined&&a.one("select[name=field] > option[value=cf_"+e.cf+"]")&&a.one("select[name=field]").set("value","cf_"+e.cf),e.op!==undefined&&a.one("select[name=op] > option[value="+e.op+"]")&&(a.one("select[name=op]").set("value",e.op),"isempty"!==e.op&&"isnotempty"!==e.op||a.one("input[name=value]").set("disabled",!0)),e.v!==undefined&&a.one("input").set("value",e.v),M.availability_profile.form.addedEvents||(M.availability_profile.form.addedEvents=!0,t=function(e){var e=e.ancestor("span.availability_profile"),i=e.one("select[name=op]"),i="isempty"===i.get("value")||"isnotempty"===i.get("value");e.one("input[name=value]").set("disabled",i),M.core_availability.form.update()},(e=n.one(".availability-field")).delegate("change",function(){t(this)},".availability_profile select"),e.delegate("change",function(){t(this)},".availability_profile input[name=value]")),a},M.availability_profile.form.fillValue=function(e,i){var l=i.one("select[name=field]").get("value");"sf_"===l.substr(0,3)?e.sf=l.substr(3):"cf_"===l.substr(0,3)&&(e.cf=l.substr(3)),e.op=i.one("select[name=op]").get("value"),(l=i.one("input[name=value]")).get("disabled")||(e.v=l.get("value"))},M.availability_profile.form.fillErrors=function(e,i){var l={};this.fillValue(l,i),l.sf===undefined&&l.cf===undefined&&e.push("availability_profile:error_selectfield"),l.v!==undefined&&/^\s*$/.test(l.v)&&e.push("availability_profile:error_setvalue")}},"@VERSION@",{requires:["base","node","event","moodle-core_availability-form"]});
YUI.add("moodle-availability_profile-form",function(n,e){M.availability_profile=M.availability_profile||{},M.availability_profile.form=n.Object(M.core_availability.plugin),M.availability_profile.form.profiles=null,M.availability_profile.form.initInner=function(e,i){this.standardFields=e,this.customFields=i},M.availability_profile.form.getNode=function(e){for(var i,l,a,t,o='<span class="availability-group"><label><span class="pe-3">'+M.util.get_string("conditiontitle","availability_profile")+'</span> <select name="field" class="form-select"><option value="choose">'+M.util.get_string("choosedots","moodle")+"</option>",s=0;s<this.standardFields.length;s++)o+='<option value="sf_'+(i=this.standardFields[s]).field+'">'+i.display+"</option>";for(s=0;s<this.customFields.length;s++)o+='<option value="cf_'+(i=this.customFields[s]).field+'">'+i.display+"</option>";for(o+='</select></label> <label><span class="accesshide">'+M.util.get_string("label_operator","availability_profile")+' </span><select name="op" title="'+M.util.get_string("label_operator","availability_profile")+'" class="form-select">',l=["isequalto","contains","doesnotcontain","startswith","endswith","isempty","isnotempty"],s=0;s<l.length;s++)o+='<option value="'+l[s]+'">'+M.util.get_string("op_"+l[s],"availability_profile")+"</option>";return o+='</select></label> <label><span class="accesshide">'+M.util.get_string("label_value","availability_profile")+'</span><input name="value" type="text" class="form-control" style="width: 10em" title="'+M.util.get_string("label_value","availability_profile")+'"/></label></span>',a=n.Node.create('<span class="d-flex flex-wrap align-items-center">'+o+"</span>"),e.sf!==undefined&&a.one("select[name=field] > option[value=sf_"+e.sf+"]")?a.one("select[name=field]").set("value","sf_"+e.sf):e.cf!==undefined&&a.one("select[name=field] > option[value=cf_"+e.cf+"]")&&a.one("select[name=field]").set("value","cf_"+e.cf),e.op!==undefined&&a.one("select[name=op] > option[value="+e.op+"]")&&(a.one("select[name=op]").set("value",e.op),"isempty"!==e.op&&"isnotempty"!==e.op||a.one("input[name=value]").set("disabled",!0)),e.v!==undefined&&a.one("input").set("value",e.v),M.availability_profile.form.addedEvents||(M.availability_profile.form.addedEvents=!0,t=function(e){var e=e.ancestor("span.availability_profile"),i=e.one("select[name=op]"),i="isempty"===i.get("value")||"isnotempty"===i.get("value");e.one("input[name=value]").set("disabled",i),M.core_availability.form.update()},(e=n.one(".availability-field")).delegate("change",function(){t(this)},".availability_profile select"),e.delegate("change",function(){t(this)},".availability_profile input[name=value]")),a},M.availability_profile.form.fillValue=function(e,i){var l=i.one("select[name=field]").get("value");"sf_"===l.substr(0,3)?e.sf=l.substr(3):"cf_"===l.substr(0,3)&&(e.cf=l.substr(3)),e.op=i.one("select[name=op]").get("value"),(l=i.one("input[name=value]")).get("disabled")||(e.v=l.get("value"))},M.availability_profile.form.fillErrors=function(e,i){var l={};this.fillValue(l,i),l.sf===undefined&&l.cf===undefined&&e.push("availability_profile:error_selectfield"),l.v!==undefined&&/^\s*$/.test(l.v)&&e.push("availability_profile:error_setvalue")}},"@VERSION@",{requires:["base","node","event","moodle-core_availability-form"]});

View file

@ -37,7 +37,7 @@ M.availability_profile.form.getNode = function(json) {
// Create HTML structure.
var html = '<span class="availability-group"><label><span class="pe-3">' +
M.util.get_string('conditiontitle', 'availability_profile') + '</span> ' +
'<select name="field" class="custom-select">' +
'<select name="field" class="form-select">' +
'<option value="choose">' + M.util.get_string('choosedots', 'moodle') + '</option>';
var fieldInfo;
for (var i = 0; i < this.standardFields.length; i++) {
@ -52,7 +52,7 @@ M.availability_profile.form.getNode = function(json) {
}
html += '</select></label> <label><span class="accesshide">' + M.util.get_string('label_operator', 'availability_profile') +
' </span><select name="op" title="' + M.util.get_string('label_operator', 'availability_profile') + '"' +
' class="custom-select">';
' class="form-select">';
var operators = ['isequalto', 'contains', 'doesnotcontain', 'startswith', 'endswith',
'isempty', 'isnotempty'];
for (i = 0; i < operators.length; i++) {

View file

@ -35,7 +35,7 @@ M.availability_profile.form.getNode = function(json) {
// Create HTML structure.
var html = '<span class="availability-group"><label><span class="pe-3">' +
M.util.get_string('conditiontitle', 'availability_profile') + '</span> ' +
'<select name="field" class="custom-select">' +
'<select name="field" class="form-select">' +
'<option value="choose">' + M.util.get_string('choosedots', 'moodle') + '</option>';
var fieldInfo;
for (var i = 0; i < this.standardFields.length; i++) {
@ -50,7 +50,7 @@ M.availability_profile.form.getNode = function(json) {
}
html += '</select></label> <label><span class="accesshide">' + M.util.get_string('label_operator', 'availability_profile') +
' </span><select name="op" title="' + M.util.get_string('label_operator', 'availability_profile') + '"' +
' class="custom-select">';
' class="form-select">';
var operators = ['isequalto', 'contains', 'doesnotcontain', 'startswith', 'endswith',
'isempty', 'isnotempty'];
for (i = 0; i < operators.length; i++) {

View file

@ -379,14 +379,14 @@ M.core_availability.List = function(json, root, parentRoot) {
'<div class="availability-header mb-1"><span>' +
M.util.get_string('listheader_sign_before', 'availability') + '</span>' +
' <label><span class="accesshide">' + M.util.get_string('label_sign', 'availability') +
' </span><select class="availability-neg custom-select mx-1"' +
' </span><select class="availability-neg form-select mx-1"' +
' title="' + M.util.get_string('label_sign', 'availability') + '">' +
'<option value="">' + M.util.get_string('listheader_sign_pos', 'availability') + '</option>' +
'<option value="!">' + M.util.get_string('listheader_sign_neg', 'availability') + '</option></select></label> ' +
'<span class="availability-single">' + M.util.get_string('listheader_single', 'availability') + '</span>' +
'<span class="availability-multi">' + M.util.get_string('listheader_multi_before', 'availability') +
' <label><span class="accesshide">' + M.util.get_string('label_multi', 'availability') + ' </span>' +
'<select class="availability-op custom-select mx-1"' +
'<select class="availability-op form-select mx-1"' +
' title="' + M.util.get_string('label_multi', 'availability') + '"><option value="&">' +
M.util.get_string('listheader_multi_and', 'availability') + '</option>' +
'<option value="|">' + M.util.get_string('listheader_multi_or', 'availability') + '</option></select></label> ' +

File diff suppressed because one or more lines are too long

View file

@ -379,14 +379,14 @@ M.core_availability.List = function(json, root, parentRoot) {
'<div class="availability-header mb-1"><span>' +
M.util.get_string('listheader_sign_before', 'availability') + '</span>' +
' <label><span class="accesshide">' + M.util.get_string('label_sign', 'availability') +
' </span><select class="availability-neg custom-select mx-1"' +
' </span><select class="availability-neg form-select mx-1"' +
' title="' + M.util.get_string('label_sign', 'availability') + '">' +
'<option value="">' + M.util.get_string('listheader_sign_pos', 'availability') + '</option>' +
'<option value="!">' + M.util.get_string('listheader_sign_neg', 'availability') + '</option></select></label> ' +
'<span class="availability-single">' + M.util.get_string('listheader_single', 'availability') + '</span>' +
'<span class="availability-multi">' + M.util.get_string('listheader_multi_before', 'availability') +
' <label><span class="accesshide">' + M.util.get_string('label_multi', 'availability') + ' </span>' +
'<select class="availability-op custom-select mx-1"' +
'<select class="availability-op form-select mx-1"' +
' title="' + M.util.get_string('label_multi', 'availability') + '"><option value="&">' +
M.util.get_string('listheader_multi_and', 'availability') + '</option>' +
'<option value="|">' + M.util.get_string('listheader_multi_or', 'availability') + '</option></select></label> ' +

View file

@ -377,14 +377,14 @@ M.core_availability.List = function(json, root, parentRoot) {
'<div class="availability-header mb-1"><span>' +
M.util.get_string('listheader_sign_before', 'availability') + '</span>' +
' <label><span class="accesshide">' + M.util.get_string('label_sign', 'availability') +
' </span><select class="availability-neg custom-select mx-1"' +
' </span><select class="availability-neg form-select mx-1"' +
' title="' + M.util.get_string('label_sign', 'availability') + '">' +
'<option value="">' + M.util.get_string('listheader_sign_pos', 'availability') + '</option>' +
'<option value="!">' + M.util.get_string('listheader_sign_neg', 'availability') + '</option></select></label> ' +
'<span class="availability-single">' + M.util.get_string('listheader_single', 'availability') + '</span>' +
'<span class="availability-multi">' + M.util.get_string('listheader_multi_before', 'availability') +
' <label><span class="accesshide">' + M.util.get_string('label_multi', 'availability') + ' </span>' +
'<select class="availability-op custom-select mx-1"' +
'<select class="availability-op form-select mx-1"' +
' title="' + M.util.get_string('label_multi', 'availability') + '"><option value="&">' +
M.util.get_string('listheader_multi_and', 'availability') + '</option>' +
'<option value="|">' + M.util.get_string('listheader_multi_or', 'availability') + '</option></select></label> ' +

View file

@ -86,7 +86,7 @@ class copy_form extends \moodleform {
$mform->setConstant('returnurl', $returnurl);
// Form heading.
$mform->addElement('html', \html_writer::div(get_string('copycoursedesc', 'backup'), 'form-description mb-6'));
$mform->addElement('html', \html_writer::div(get_string('copycoursedesc', 'backup'), 'form-text mb-6'));
// Course fullname.
$mform->addElement('text', 'fullname', get_string('fullnamecourse'),

View file

@ -6,6 +6,6 @@ define("core_badges/selectors",["exports"],(function(_exports){Object.defineProp
* @copyright 2020 Sara Arjona <sara@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
const getDataSelector=(name,value)=>"[data-".concat(name,'="').concat(value,'"]');var _default={actions:{deletebackpack:getDataSelector("action","deletebackpack"),enablebadge:getDataSelector("action","enablebadge"),disablebadge:getDataSelector("action","disablebadge")},elements:{clearsearch:".input-group-append .clear-icon",main:"#backpacklist",backpackurl:"[data-backpackurl]"}};return _exports.default=_default,_exports.default}));
const getDataSelector=(name,value)=>"[data-".concat(name,'="').concat(value,'"]');var _default={actions:{deletebackpack:getDataSelector("action","deletebackpack"),enablebadge:getDataSelector("action","enablebadge"),disablebadge:getDataSelector("action","disablebadge")},elements:{clearsearch:".input-group .clear-icon",main:"#backpacklist",backpackurl:"[data-backpackurl]"}};return _exports.default=_default,_exports.default}));
//# sourceMappingURL=selectors.min.js.map

View file

@ -1 +1 @@
{"version":3,"file":"selectors.min.js","sources":["../src/selectors.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Define all of the selectors we will be using on the backpack interface.\n *\n * @module core_badges/selectors\n * @copyright 2020 Sara Arjona <sara@moodle.com>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\n/**\n * A small helper function to build queryable data selectors.\n *\n * @method getDataSelector\n * @param {String} name\n * @param {String} value\n * @return {string}\n */\nconst getDataSelector = (name, value) => {\n return `[data-${name}=\"${value}\"]`;\n};\n\nexport default {\n actions: {\n deletebackpack: getDataSelector('action', 'deletebackpack'),\n enablebadge: getDataSelector('action', 'enablebadge'),\n disablebadge: getDataSelector('action', 'disablebadge'),\n },\n elements: {\n clearsearch: '.input-group-append .clear-icon',\n main: '#backpacklist',\n backpackurl: '[data-backpackurl]',\n },\n};\n"],"names":["getDataSelector","name","value","actions","deletebackpack","enablebadge","disablebadge","elements","clearsearch","main","backpackurl"],"mappings":";;;;;;;;MA+BMA,gBAAkB,CAACC,KAAMC,wBACXD,kBAASC,yBAGd,CACXC,QAAS,CACLC,eAAgBJ,gBAAgB,SAAU,kBAC1CK,YAAaL,gBAAgB,SAAU,eACvCM,aAAcN,gBAAgB,SAAU,iBAE5CO,SAAU,CACNC,YAAa,kCACbC,KAAM,gBACNC,YAAa"}
{"version":3,"file":"selectors.min.js","sources":["../src/selectors.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Define all of the selectors we will be using on the backpack interface.\n *\n * @module core_badges/selectors\n * @copyright 2020 Sara Arjona <sara@moodle.com>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\n/**\n * A small helper function to build queryable data selectors.\n *\n * @method getDataSelector\n * @param {String} name\n * @param {String} value\n * @return {string}\n */\nconst getDataSelector = (name, value) => {\n return `[data-${name}=\"${value}\"]`;\n};\n\nexport default {\n actions: {\n deletebackpack: getDataSelector('action', 'deletebackpack'),\n enablebadge: getDataSelector('action', 'enablebadge'),\n disablebadge: getDataSelector('action', 'disablebadge'),\n },\n elements: {\n clearsearch: '.input-group .clear-icon',\n main: '#backpacklist',\n backpackurl: '[data-backpackurl]',\n },\n};\n"],"names":["getDataSelector","name","value","actions","deletebackpack","enablebadge","disablebadge","elements","clearsearch","main","backpackurl"],"mappings":";;;;;;;;MA+BMA,gBAAkB,CAACC,KAAMC,wBACXD,kBAASC,yBAGd,CACXC,QAAS,CACLC,eAAgBJ,gBAAgB,SAAU,kBAC1CK,YAAaL,gBAAgB,SAAU,eACvCM,aAAcN,gBAAgB,SAAU,iBAE5CO,SAAU,CACNC,YAAa,2BACbC,KAAM,gBACNC,YAAa"}

View file

@ -40,7 +40,7 @@ export default {
disablebadge: getDataSelector('action', 'disablebadge'),
},
elements: {
clearsearch: '.input-group-append .clear-icon',
clearsearch: '.input-group .clear-icon',
main: '#backpacklist',
backpackurl: '[data-backpackurl]',
},

View file

@ -30,7 +30,6 @@
<label for="calendarexporturl">{{#str}}calendarexporturl, calendar{{/str}}</label>
<div class="input-group">
<input type="text" id="calendarexporturl" class="form-control" value="{{calendarexporturl}}" readonly />
<div class="input-group-append">
<button id="copyexporturl" {{!
}} data-action="copytoclipboard"{{!
}} data-clipboard-target="#calendarexporturl"{{!
@ -44,7 +43,6 @@
</div>
</div>
</div>
</div>
{{#js}}
require(['core_calendar/export'], function(calendarExport) {
calendarExport.init();

View file

@ -193,7 +193,7 @@ class core_course_management_renderer extends plugin_renderer_base {
'type' => 'checkbox',
'name' => 'bcat[]',
'value' => $category->id,
'class' => 'bulk-action-checkbox custom-control-input',
'class' => 'bulk-action-checkbox form-check-input',
'data-action' => 'select'
);
@ -243,11 +243,11 @@ class core_course_management_renderer extends plugin_renderer_base {
$html = html_writer::start_tag('li', $attributes);
$html .= html_writer::start_div('clearfix');
$html .= html_writer::start_div('float-start ' . $checkboxclass);
$html .= html_writer::start_div('custom-control custom-checkbox me-1 ');
$html .= html_writer::start_div('form-check custom-checkbox me-1 ');
$html .= html_writer::empty_tag('input', $bcatinput);
$labeltext = html_writer::span(get_string('bulkactionselect', 'moodle', $text), 'visually-hidden');
$html .= html_writer::tag('label', $labeltext, array(
'class' => 'custom-control-label',
'class' => 'form-check-label',
'for' => 'categorylistitem' . $category->id));
$html .= html_writer::end_div();
$html .= html_writer::end_div();
@ -603,7 +603,7 @@ class core_course_management_renderer extends plugin_renderer_base {
'type' => 'checkbox',
'name' => 'bc[]',
'value' => $course->id,
'class' => 'bulk-action-checkbox custom-control-input',
'class' => 'bulk-action-checkbox form-check-input',
'data-action' => 'select'
);
@ -624,11 +624,11 @@ class core_course_management_renderer extends plugin_renderer_base {
}
$html .= html_writer::start_div('float-start ' . $checkboxclass);
$html .= html_writer::start_div('custom-control custom-checkbox me-1 ');
$html .= html_writer::start_div('form-check custom-checkbox me-1 ');
$html .= html_writer::empty_tag('input', $bulkcourseinput);
$labeltext = html_writer::span(get_string('bulkactionselect', 'moodle', $text), 'visually-hidden');
$html .= html_writer::tag('label', $labeltext, array(
'class' => 'custom-control-label',
'class' => 'form-check-label',
'for' => 'courselistitem' . $course->id));
$html .= html_writer::end_div();
$html .= html_writer::end_div();
@ -1192,7 +1192,7 @@ class core_course_management_renderer extends plugin_renderer_base {
'id' => 'coursesearchlistitem' . $course->id,
'name' => 'bc[]',
'value' => $course->id,
'class' => 'bulk-action-checkbox custom-control-input',
'class' => 'bulk-action-checkbox form-check-input',
'data-action' => 'select'
);
}
@ -1203,11 +1203,11 @@ class core_course_management_renderer extends plugin_renderer_base {
$html .= html_writer::start_div('clearfix');
$html .= html_writer::start_div('float-start');
if ($bulkcourseinput) {
$html .= html_writer::start_div('custom-control custom-checkbox me-1');
$html .= html_writer::start_div('form-check custom-checkbox me-1');
$html .= html_writer::empty_tag('input', $bulkcourseinput);
$labeltext = html_writer::span(get_string('bulkactionselect', 'moodle', $text), 'visually-hidden');
$html .= html_writer::tag('label', $labeltext, array(
'class' => 'custom-control-label',
'class' => 'form-check-label',
'for' => 'coursesearchlistitem' . $course->id));
$html .= html_writer::end_div();
}

View file

@ -24,19 +24,17 @@
{{#search}}
<form class="row">
<div class="input-group pt-4 pb-1 col-md-6">
<label for="search">
<span class="visually-hidden">{{#str}} searchactivitiesbyname, course {{/str}}</span>
</label>
<input type="text" name="search" id="search" class="form-control rounded-start" autocomplete="off"
placeholder="{{#str}}search, core {{/str}}" {{#query}} value="{{query}}" autofocus {{/query}}
>
<div class="input-group-append">
<label for="search">
<span class="visually-hidden">{{#str}} searchactivitiesbyname, course {{/str}}</span>
</label>
<button type="submit" class="btn btn-outline-secondary rounded-end">
<i class="icon fa fa-search fa-fw m-0" aria-hidden="true"></i>
<span class="visually-hidden">{{#str}}submitsearch, course {{/str}}</span>
</button>
</div>
</div>
</form>
{{#query}}
<div class="pt-1 pb-1">

View file

@ -1,11 +1,11 @@
/* enrol_lti styles */
#registration-tab-content .input-group-append button.btn {
#registration-tab-content .input-group button.btn {
border: solid 1px #8f959e;
}
form#auto_submit {
display: none;
}
#registration-tab-content .input-group-append button.btn span.pix {
#registration-tab-content .input-group button.btn span.pix {
padding-left: 0.5rem;
}

View file

@ -69,7 +69,6 @@
<td class="col-9">
<div class="input-group col-md-6 ms-0 ps-0">
<input class="form-control" type="text" value="{{url}}" aria-label="{{url}}" id="lti_tool_endpoint_url_{{id}}" readonly>
<div class="input-group-append">
<button class="btn btn-secondary"
aria-label="{{#str}} copytoclipboard, enrol_lti {{/str}}"
data-action="copytoclipboard"
@ -80,7 +79,6 @@
<span class="pix">{{#pix}} t/clipboard, core {{/pix}}</span>
</button>
</div>
</div>
</td>
</tr>
</tbody>
@ -107,7 +105,6 @@
<td class="col-9">
<div class="input-group col-md-6 ms-0 ps-0">
<input class="form-control" type="text" value="{{url}}" aria-label="{{url}}" id="lti_tool_endpoint_url_{{id}}" readonly>
<div class="input-group-append">
<button class="btn btn-secondary"
aria-label="{{#str}} copytoclipboard, enrol_lti {{/str}}"
data-action="copytoclipboard"
@ -118,7 +115,6 @@
<span class="pix">{{#pix}} t/clipboard, core {{/pix}}</span>
</button>
</div>
</div>
</td>
</tr>
{{/manual_registration_urls}}

View file

@ -49,9 +49,9 @@
</ul>
</fieldset>
<div class="d-flex mt-2">
<div class="d-flex align-items-center form-check">
<label id="check-all" class="selected-option-info text-truncate form-check-label d-block">
<input disabled class="form-check-input" type="checkbox" data-action="selectall">
<div class="ms-1 form-check">
<input disabled class="form-check-input" type="checkbox" data-action="selectall" id="check-collapse-all">
<label for="check-collapse-all" id="check-all" class="selected-option-info text-truncate form-check-label d-block">
{{#str}}selectall, core{{/str}}
</label>
</div>

View file

@ -27,8 +27,8 @@
}
}}
<li class="w-100 result-row form-check mb-1">
<label class="selected-option-info d-block pe-3 text-truncate form-check-label">
<input class="form-check-input" data-collapse="{{name}}" type="checkbox" value="">
<input class="form-check-input" data-collapse="{{name}}" type="checkbox" value="" id="check-collapse-{{name}}">
<label for="check-collapse-{{name}}" class="selected-option-info d-block pe-3 text-truncate form-check-label">
<span class="selected-option-text w-100 p-0">
{{{displayName}}}
</span>

View file

@ -35,7 +35,7 @@
}}
<label>
{{#str}}show{{/str}}
<select name="perpage" class="custom-select ignoredirty" id="{{uniqid}}">
<select name="perpage" class="form-select ignoredirty" id="{{uniqid}}">
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{{name}}}</option>
{{/options}}

View file

@ -42,7 +42,7 @@
<fieldset class="d-flex flex-wrap align-items-center">
<legend class="accesshide">{{label}}</legend>
<label for="{{menuname}}">{{menulabel}}</label>
<select name="{{menuname}}" id="{{menuname}}" class="form-control custom-select">
<select name="{{menuname}}" id="{{menuname}}" class="form-control form-select">
{{#menuoptions}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/menuoptions}}

View file

@ -33,7 +33,7 @@
{{/readonly}}
{{^readonly}}
<label for="{{name}}" class="accesshide">{{label}}</label>
<select id="{{name}}" name="{{name}}" class="custom-select" {{#disabled}}disabled{{/disabled}}>
<select id="{{name}}" name="{{name}}" class="form-select" {{#disabled}}disabled{{/disabled}}>
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}

View file

@ -36,7 +36,7 @@
<div class="col-auto">
<label>
{{#str}}show{{/str}}
<select name="perpage" class="mt-1 custom-select ignoredirty" id="{{uniqid}}">
<select name="perpage" class="mt-1 form-select ignoredirty" id="{{uniqid}}">
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{name}}</option>
{{/options}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -198,7 +198,7 @@ define(
var i,
inputelement = $('<select></select>').
attr('id', uniqueId('id_inplacevalue_', 20)).
addClass('custom-select'),
addClass('form-select'),
lbl = $('<label class="accesshide">' + mainelement.attr('data-editlabel') + '</label>')
.attr('for', inputelement.attr('id'));
for (i in options) {
@ -237,7 +237,7 @@ define(
inputelement = $('<select></select>').
attr('id', uniqueId('id_inplacevalue_', 20)).
addClass('form-autocomplete-original-select').
addClass('custom-select'),
addClass('form-select'),
lbl = $('<label class="accesshide">' + mainelement.attr('data-editlabel') + '</label>')
.attr('for', inputelement.attr('id')),
options = args.options,

View file

@ -302,7 +302,7 @@ class html_writer {
$class = str_replace(']', '', $class);
$attributes['class'] = $class;
}
$attributes['class'] = 'select custom-select ' . $attributes['class']; // Add 'select' selector always.
$attributes['class'] = 'select form-select ' . $attributes['class']; // Add 'select' selector always.
$attributes['name'] = $name;

View file

@ -86,10 +86,8 @@ var CSS = {
'<input class="form-control {{CSS.INPUTH5PFILE}}" type="url" value="{{fileURL}}" ' +
'id="{{elementid}}_{{CSS.INPUTH5PFILE}}" data-region="h5pfile" size="32"/>' +
'{{#if canUpload}}' +
'<span class="input-group-append">' +
'<button class="btn btn-secondary {{CSS.H5PBROWSER}}" type="button">' +
'{{get_string "browserepositories" component}}</button>' +
'</span>' +
'{{/if}}' +
'</div>' +
'{{#if canUpload}}' +

File diff suppressed because one or more lines are too long

View file

@ -86,10 +86,8 @@ var CSS = {
'<input class="form-control {{CSS.INPUTH5PFILE}}" type="url" value="{{fileURL}}" ' +
'id="{{elementid}}_{{CSS.INPUTH5PFILE}}" data-region="h5pfile" size="32"/>' +
'{{#if canUpload}}' +
'<span class="input-group-append">' +
'<button class="btn btn-secondary {{CSS.H5PBROWSER}}" type="button">' +
'{{get_string "browserepositories" component}}</button>' +
'</span>' +
'{{/if}}' +
'</div>' +
'{{#if canUpload}}' +

View file

@ -84,10 +84,8 @@ var CSS = {
'<input class="form-control {{CSS.INPUTH5PFILE}}" type="url" value="{{fileURL}}" ' +
'id="{{elementid}}_{{CSS.INPUTH5PFILE}}" data-region="h5pfile" size="32"/>' +
'{{#if canUpload}}' +
'<span class="input-group-append">' +
'<button class="btn btn-secondary {{CSS.H5PBROWSER}}" type="button">' +
'{{get_string "browserepositories" component}}</button>' +
'</span>' +
'{{/if}}' +
'</div>' +
'{{#if canUpload}}' +

View file

@ -116,10 +116,8 @@ var CSS = {
'<div class="input-group input-append w-100">' +
'<input name="{{FORMNAMES.URL}}" class="form-control {{CSS.INPUTURL}}" type="url" ' +
'id="{{elementid}}_{{CSS.INPUTURL}}" size="32"/>' +
'<span class="input-group-append">' +
'<button class="btn btn-secondary {{CSS.IMAGEBROWSER}}" type="button">' +
'{{get_string "browserepositories" component}}</button>' +
'</span>' +
'</div>' +
'</div>' +
'{{else}}' +
@ -183,7 +181,7 @@ var CSS = {
// Add the alignment selector.
'<div class="d-flex flex-wrap align-items-center mb-1">' +
'<label class="mb-0" for="{{elementid}}_{{CSS.INPUTALIGNMENT}}">{{get_string "alignment" component}}</label>' +
'<select class="custom-select ms-2 {{CSS.INPUTALIGNMENT}}" id="{{elementid}}_{{CSS.INPUTALIGNMENT}}">' +
'<select class="form-select ms-2 {{CSS.INPUTALIGNMENT}}" id="{{elementid}}_{{CSS.INPUTALIGNMENT}}">' +
'{{#each alignments}}' +
'<option value="{{value}}">{{get_string str ../component}}</option>' +
'{{/each}}' +

File diff suppressed because one or more lines are too long

View file

@ -116,10 +116,8 @@ var CSS = {
'<div class="input-group input-append w-100">' +
'<input name="{{FORMNAMES.URL}}" class="form-control {{CSS.INPUTURL}}" type="url" ' +
'id="{{elementid}}_{{CSS.INPUTURL}}" size="32"/>' +
'<span class="input-group-append">' +
'<button class="btn btn-secondary {{CSS.IMAGEBROWSER}}" type="button">' +
'{{get_string "browserepositories" component}}</button>' +
'</span>' +
'</div>' +
'</div>' +
'{{else}}' +
@ -183,7 +181,7 @@ var CSS = {
// Add the alignment selector.
'<div class="d-flex flex-wrap align-items-center mb-1">' +
'<label class="mb-0" for="{{elementid}}_{{CSS.INPUTALIGNMENT}}">{{get_string "alignment" component}}</label>' +
'<select class="custom-select ms-2 {{CSS.INPUTALIGNMENT}}" id="{{elementid}}_{{CSS.INPUTALIGNMENT}}">' +
'<select class="form-select ms-2 {{CSS.INPUTALIGNMENT}}" id="{{elementid}}_{{CSS.INPUTALIGNMENT}}">' +
'{{#each alignments}}' +
'<option value="{{value}}">{{get_string str ../component}}</option>' +
'{{/each}}' +

View file

@ -114,10 +114,8 @@ var CSS = {
'<div class="input-group input-append w-100">' +
'<input name="{{FORMNAMES.URL}}" class="form-control {{CSS.INPUTURL}}" type="url" ' +
'id="{{elementid}}_{{CSS.INPUTURL}}" size="32"/>' +
'<span class="input-group-append">' +
'<button class="btn btn-secondary {{CSS.IMAGEBROWSER}}" type="button">' +
'{{get_string "browserepositories" component}}</button>' +
'</span>' +
'</div>' +
'</div>' +
'{{else}}' +
@ -181,7 +179,7 @@ var CSS = {
// Add the alignment selector.
'<div class="d-flex flex-wrap align-items-center mb-1">' +
'<label class="mb-0" for="{{elementid}}_{{CSS.INPUTALIGNMENT}}">{{get_string "alignment" component}}</label>' +
'<select class="custom-select ms-2 {{CSS.INPUTALIGNMENT}}" id="{{elementid}}_{{CSS.INPUTALIGNMENT}}">' +
'<select class="form-select ms-2 {{CSS.INPUTALIGNMENT}}" id="{{elementid}}_{{CSS.INPUTALIGNMENT}}">' +
'{{#each alignments}}' +
'<option value="{{value}}">{{get_string str ../component}}</option>' +
'{{/each}}' +

View file

@ -58,10 +58,8 @@ var COMPONENTNAME = 'atto_link',
'<div class="input-group input-append w-100 mb-1">' +
'<input class="form-control url {{CSS.URLINPUT}}" type="url" ' +
'id="{{elementid}}_atto_link_urlentry"/>' +
'<span class="input-group-append">' +
'<button class="btn btn-secondary openlinkbrowser" type="button">' +
'{{get_string "browserepositories" component}}</button>' +
'</span>' +
'</div>' +
'{{else}}' +
'<div class="mb-1">' +

File diff suppressed because one or more lines are too long

View file

@ -58,10 +58,8 @@ var COMPONENTNAME = 'atto_link',
'<div class="input-group input-append w-100 mb-1">' +
'<input class="form-control url {{CSS.URLINPUT}}" type="url" ' +
'id="{{elementid}}_atto_link_urlentry"/>' +
'<span class="input-group-append">' +
'<button class="btn btn-secondary openlinkbrowser" type="button">' +
'{{get_string "browserepositories" component}}</button>' +
'</span>' +
'</div>' +
'{{else}}' +
'<div class="mb-1">' +

View file

@ -56,10 +56,8 @@ var COMPONENTNAME = 'atto_link',
'<div class="input-group input-append w-100 mb-1">' +
'<input class="form-control url {{CSS.URLINPUT}}" type="url" ' +
'id="{{elementid}}_atto_link_urlentry"/>' +
'<span class="input-group-append">' +
'<button class="btn btn-secondary openlinkbrowser" type="button">' +
'{{get_string "browserepositories" component}}</button>' +
'</span>' +
'</div>' +
'{{else}}' +
'<div class="mb-1">' +

View file

@ -216,10 +216,8 @@ var COMPONENTNAME = 'atto_media',
'</label>' +
'<div class="input-group input-append w-100">' +
'<input id="url-input" class="form-control {{CSS.URL_INPUT}}" type="url" size="32"/>' +
'<span class="input-group-append">' +
'<button class="btn btn-secondary openmediabrowser" type="button">' +
'{{get_string "browserepositories" component}}</button>' +
'</span>' +
'</div>' +
'</div>' +
'{{#multisource}}' +
@ -363,7 +361,7 @@ var COMPONENTNAME = 'atto_media',
'{{renderPartial "form_components.source" context=this id=CSS.TRACK_SOURCE entersourcelabel=sourcelabel}}' +
'<div class="mb-3">' +
'<label class="w-100" for="lang-input">{{get_string "srclang" component}}</label>' +
'<select id="lang-input" class="custom-select {{CSS.TRACK_LANG_INPUT}}">' +
'<select id="lang-input" class="form-select {{CSS.TRACK_LANG_INPUT}}">' +
'<optgroup label="{{get_string "languagesinstalled" component}}">' +
'{{#langsinstalled}}' +
'<option value="{{code}}" {{#default}}selected="selected"{{/default}}>{{lang}}</option>' +

File diff suppressed because one or more lines are too long

View file

@ -216,10 +216,8 @@ var COMPONENTNAME = 'atto_media',
'</label>' +
'<div class="input-group input-append w-100">' +
'<input id="url-input" class="form-control {{CSS.URL_INPUT}}" type="url" size="32"/>' +
'<span class="input-group-append">' +
'<button class="btn btn-secondary openmediabrowser" type="button">' +
'{{get_string "browserepositories" component}}</button>' +
'</span>' +
'</div>' +
'</div>' +
'{{#multisource}}' +
@ -363,7 +361,7 @@ var COMPONENTNAME = 'atto_media',
'{{renderPartial "form_components.source" context=this id=CSS.TRACK_SOURCE entersourcelabel=sourcelabel}}' +
'<div class="mb-3">' +
'<label class="w-100" for="lang-input">{{get_string "srclang" component}}</label>' +
'<select id="lang-input" class="custom-select {{CSS.TRACK_LANG_INPUT}}">' +
'<select id="lang-input" class="form-select {{CSS.TRACK_LANG_INPUT}}">' +
'<optgroup label="{{get_string "languagesinstalled" component}}">' +
'{{#langsinstalled}}' +
'<option value="{{code}}" {{#default}}selected="selected"{{/default}}>{{lang}}</option>' +

View file

@ -214,10 +214,8 @@ var COMPONENTNAME = 'atto_media',
'</label>' +
'<div class="input-group input-append w-100">' +
'<input id="url-input" class="form-control {{CSS.URL_INPUT}}" type="url" size="32"/>' +
'<span class="input-group-append">' +
'<button class="btn btn-secondary openmediabrowser" type="button">' +
'{{get_string "browserepositories" component}}</button>' +
'</span>' +
'</div>' +
'</div>' +
'{{#multisource}}' +
@ -361,7 +359,7 @@ var COMPONENTNAME = 'atto_media',
'{{renderPartial "form_components.source" context=this id=CSS.TRACK_SOURCE entersourcelabel=sourcelabel}}' +
'<div class="mb-3">' +
'<label class="w-100" for="lang-input">{{get_string "srclang" component}}</label>' +
'<select id="lang-input" class="custom-select {{CSS.TRACK_LANG_INPUT}}">' +
'<select id="lang-input" class="form-select {{CSS.TRACK_LANG_INPUT}}">' +
'<optgroup label="{{get_string "languagesinstalled" component}}">' +
'{{#langsinstalled}}' +
'<option value="{{code}}" {{#default}}selected="selected"{{/default}}>{{lang}}</option>' +

View file

@ -55,7 +55,7 @@ var COMPONENT = 'atto_table',
'<label for="{{elementid}}_atto_table_captionposition">' +
'{{get_string "captionposition" component}}</label>' +
'</div><div class="col-sm-8">' +
'<select class="custom-select {{CSS.CAPTIONPOSITION}}" id="{{elementid}}_atto_table_captionposition">' +
'<select class="form-select {{CSS.CAPTIONPOSITION}}" id="{{elementid}}_atto_table_captionposition">' +
'<option value=""></option>' +
'<option value="top">{{get_string "top" "editor"}}</option>' +
'<option value="bottom">{{get_string "bottom" "editor"}}</option>' +
@ -66,7 +66,7 @@ var COMPONENT = 'atto_table',
'<div class="col-sm-4">' +
'<label for="{{elementid}}_atto_table_headers">{{get_string "headers" component}}</label>' +
'</div><div class="col-sm-8">' +
'<select class="custom-select {{CSS.HEADERS}}" id="{{elementid}}_atto_table_headers">' +
'<select class="form-select {{CSS.HEADERS}}" id="{{elementid}}_atto_table_headers">' +
'<option value="columns">{{get_string "columns" component}}' + '</option>' +
'<option value="rows">{{get_string "rows" component}}' + '</option>' +
'<option value="both">{{get_string "both" component}}' + '</option>' +
@ -101,7 +101,7 @@ var COMPONENT = 'atto_table',
'<div class="col-sm-4">' +
'<label for="{{elementid}}_atto_table_borders">{{get_string "borders" component}}</label>' +
'</div><div class="col-sm-8">' +
'<select name="borders" class="custom-select {{CSS.BORDERS}}" id="{{elementid}}_atto_table_borders">' +
'<select name="borders" class="form-select {{CSS.BORDERS}}" id="{{elementid}}_atto_table_borders">' +
'<option value="default">{{get_string "themedefault" component}}' + '</option>' +
'<option value="outer">{{get_string "outer" component}}' + '</option>' +
'<option value="all">{{get_string "all" component}}' + '</option>' +
@ -113,7 +113,7 @@ var COMPONENT = 'atto_table',
'<label for="{{elementid}}_atto_table_borderstyle">' +
'{{get_string "borderstyles" component}}</label>' +
'</div><div class="col-sm-8">' +
'<select name="borderstyles" class="custom-select {{CSS.BORDERSTYLE}}" ' +
'<select name="borderstyles" class="form-select {{CSS.BORDERSTYLE}}" ' +
'id="{{elementid}}_atto_table_borderstyle">' +
'{{#each borderStyles}}' +
'<option value="' + '{{this}}' + '">' + '{{get_string this ../component}}' + '</option>' +

File diff suppressed because one or more lines are too long

View file

@ -55,7 +55,7 @@ var COMPONENT = 'atto_table',
'<label for="{{elementid}}_atto_table_captionposition">' +
'{{get_string "captionposition" component}}</label>' +
'</div><div class="col-sm-8">' +
'<select class="custom-select {{CSS.CAPTIONPOSITION}}" id="{{elementid}}_atto_table_captionposition">' +
'<select class="form-select {{CSS.CAPTIONPOSITION}}" id="{{elementid}}_atto_table_captionposition">' +
'<option value=""></option>' +
'<option value="top">{{get_string "top" "editor"}}</option>' +
'<option value="bottom">{{get_string "bottom" "editor"}}</option>' +
@ -66,7 +66,7 @@ var COMPONENT = 'atto_table',
'<div class="col-sm-4">' +
'<label for="{{elementid}}_atto_table_headers">{{get_string "headers" component}}</label>' +
'</div><div class="col-sm-8">' +
'<select class="custom-select {{CSS.HEADERS}}" id="{{elementid}}_atto_table_headers">' +
'<select class="form-select {{CSS.HEADERS}}" id="{{elementid}}_atto_table_headers">' +
'<option value="columns">{{get_string "columns" component}}' + '</option>' +
'<option value="rows">{{get_string "rows" component}}' + '</option>' +
'<option value="both">{{get_string "both" component}}' + '</option>' +
@ -101,7 +101,7 @@ var COMPONENT = 'atto_table',
'<div class="col-sm-4">' +
'<label for="{{elementid}}_atto_table_borders">{{get_string "borders" component}}</label>' +
'</div><div class="col-sm-8">' +
'<select name="borders" class="custom-select {{CSS.BORDERS}}" id="{{elementid}}_atto_table_borders">' +
'<select name="borders" class="form-select {{CSS.BORDERS}}" id="{{elementid}}_atto_table_borders">' +
'<option value="default">{{get_string "themedefault" component}}' + '</option>' +
'<option value="outer">{{get_string "outer" component}}' + '</option>' +
'<option value="all">{{get_string "all" component}}' + '</option>' +
@ -113,7 +113,7 @@ var COMPONENT = 'atto_table',
'<label for="{{elementid}}_atto_table_borderstyle">' +
'{{get_string "borderstyles" component}}</label>' +
'</div><div class="col-sm-8">' +
'<select name="borderstyles" class="custom-select {{CSS.BORDERSTYLE}}" ' +
'<select name="borderstyles" class="form-select {{CSS.BORDERSTYLE}}" ' +
'id="{{elementid}}_atto_table_borderstyle">' +
'{{#each borderStyles}}' +
'<option value="' + '{{this}}' + '">' + '{{get_string this ../component}}' + '</option>' +

View file

@ -53,7 +53,7 @@ var COMPONENT = 'atto_table',
'<label for="{{elementid}}_atto_table_captionposition">' +
'{{get_string "captionposition" component}}</label>' +
'</div><div class="col-sm-8">' +
'<select class="custom-select {{CSS.CAPTIONPOSITION}}" id="{{elementid}}_atto_table_captionposition">' +
'<select class="form-select {{CSS.CAPTIONPOSITION}}" id="{{elementid}}_atto_table_captionposition">' +
'<option value=""></option>' +
'<option value="top">{{get_string "top" "editor"}}</option>' +
'<option value="bottom">{{get_string "bottom" "editor"}}</option>' +
@ -64,7 +64,7 @@ var COMPONENT = 'atto_table',
'<div class="col-sm-4">' +
'<label for="{{elementid}}_atto_table_headers">{{get_string "headers" component}}</label>' +
'</div><div class="col-sm-8">' +
'<select class="custom-select {{CSS.HEADERS}}" id="{{elementid}}_atto_table_headers">' +
'<select class="form-select {{CSS.HEADERS}}" id="{{elementid}}_atto_table_headers">' +
'<option value="columns">{{get_string "columns" component}}' + '</option>' +
'<option value="rows">{{get_string "rows" component}}' + '</option>' +
'<option value="both">{{get_string "both" component}}' + '</option>' +
@ -99,7 +99,7 @@ var COMPONENT = 'atto_table',
'<div class="col-sm-4">' +
'<label for="{{elementid}}_atto_table_borders">{{get_string "borders" component}}</label>' +
'</div><div class="col-sm-8">' +
'<select name="borders" class="custom-select {{CSS.BORDERS}}" id="{{elementid}}_atto_table_borders">' +
'<select name="borders" class="form-select {{CSS.BORDERS}}" id="{{elementid}}_atto_table_borders">' +
'<option value="default">{{get_string "themedefault" component}}' + '</option>' +
'<option value="outer">{{get_string "outer" component}}' + '</option>' +
'<option value="all">{{get_string "all" component}}' + '</option>' +
@ -111,7 +111,7 @@ var COMPONENT = 'atto_table',
'<label for="{{elementid}}_atto_table_borderstyle">' +
'{{get_string "borderstyles" component}}</label>' +
'</div><div class="col-sm-8">' +
'<select name="borderstyles" class="custom-select {{CSS.BORDERSTYLE}}" ' +
'<select name="borderstyles" class="form-select {{CSS.BORDERSTYLE}}" ' +
'id="{{elementid}}_atto_table_borderstyle">' +
'{{#each borderStyles}}' +
'<option value="' + '{{this}}' + '">' + '{{get_string this ../component}}' + '</option>' +

View file

@ -79,10 +79,8 @@
}} size="32"{{!
}} />
{{#canUpload}}
<span class="input-group-append">
<button class="btn btn-secondary" type="button" data-target="filepicker">
{{#str}} browserepositories, tiny_h5p{{/str}}</button>
</span>
{{/canUpload}}
</div>

View file

@ -59,9 +59,7 @@
{{#showfilepicker}}
<div class="input-group input-append w-100">
<input class="form-control fullwidth text-ltr tiny_link_urlentry" id="{{elementid}}_tiny_link_urlentry" type="text" value="{{url}}"/>
<span class="input-group-append">
<button class="btn btn-secondary openlinkbrowser" type="button">{{#str}} browserepositories, tiny_link {{/str}}</button>
</span>
</div>
{{/showfilepicker}}
{{^showfilepicker}}

View file

@ -33,9 +33,7 @@
<div class="input-group input-append w-100">
<input id="audio-audio-url-input" class="form-control tiny_media_url_entry" type="url" size="32" value="{{.}}"/>
{{#showfilepicker}}
<span class="input-group-append">
<button class="btn btn-secondary openmediabrowser" type="button">{{#str}} browserepositories, tiny_media {{/str}}</button>
</span>
{{/showfilepicker}}
</div>
</div>
@ -63,9 +61,7 @@
<div class="input-group input-append w-100">
<input id="audio-audio-url-input" class="form-control tiny_media_url_entry" type="url" size="32"/>
{{#showfilepicker}}
<span class="input-group-append">
<button class="btn btn-secondary openmediabrowser" type="button">{{#str}} browserepositories, tiny_media {{/str}}</button>
</span>
{{/showfilepicker}}
</div>
</div>
@ -253,16 +249,14 @@
<div class="input-group input-append w-100">
<input id="subtitle-audio-url-input" class="form-control tiny_media_url_entry" type="url" size="32" value="{{src}}"/>
{{#showfilepickertrack}}
<span class="input-group-append">
<button class="btn btn-secondary openmediabrowser" type="button">{{#str}} browserepositories, tiny_media {{/str}}</button>
</span>
{{/showfilepickertrack}}
</div>
</div>
</div>
<div class="mb-3">
<label class="w-100" for="subtitle-audio-lang-input">{{#str}} srclang, tiny_media {{/str}}</label>
<select id="subtitle-audio-lang-input" class="custom-select tiny_media_track_lang_entry" data-value="{{srclang}}">
<select id="subtitle-audio-lang-input" class="form-select tiny_media_track_lang_entry" data-value="{{srclang}}">
<optgroup label="{{#str}} languagesinstalled, tiny_media {{/str}}">
{{#langsinstalled}}
<option value="{{code}}" {{#default}}selected="selected"{{/default}}>{{lang}}</option>
@ -305,16 +299,14 @@
<div class="input-group input-append w-100">
<input id="subtitle-audio-url-input" class="form-control tiny_media_url_entry" type="url" size="32"/>
{{#showfilepickertrack}}
<span class="input-group-append">
<button class="btn btn-secondary openmediabrowser" type="button">{{#str}} browserepositories, tiny_media {{/str}}</button>
</span>
{{/showfilepickertrack}}
</div>
</div>
</div>
<div class="mb-3">
<label class="w-100" for="subtitle-audio-lang-input">{{#str}} srclang, tiny_media {{/str}}</label>
<select id="subtitle-audio-lang-input" class="custom-select tiny_media_track_lang_entry">
<select id="subtitle-audio-lang-input" class="form-select tiny_media_track_lang_entry">
<optgroup label="{{#str}} languagesinstalled, tiny_media {{/str}}">
{{#langsinstalled}}
<option value="{{code}}" {{#default}}selected="selected"{{/default}}>{{lang}}</option>
@ -365,16 +357,14 @@
<div class="input-group input-append w-100">
<input id="caption-audio-url-input" class="form-control tiny_media_url_entry" type="url" size="32" value="{{src}}"/>
{{#showfilepickertrack}}
<span class="input-group-append">
<button class="btn btn-secondary openmediabrowser" type="button">{{#str}} browserepositories, tiny_media {{/str}}</button>
</span>
{{/showfilepickertrack}}
</div>
</div>
</div>
<div class="mb-3">
<label class="w-100" for="caption-audio-lang-input">{{#str}} srclang, tiny_media {{/str}}</label>
<select id="caption-audio-lang-input" class="custom-select tiny_media_track_lang_entry" data-value="{{srclang}}">
<select id="caption-audio-lang-input" class="form-select tiny_media_track_lang_entry" data-value="{{srclang}}">
<optgroup label="{{#str}} languagesinstalled, tiny_media {{/str}}">
{{#langsinstalled}}
<option value="{{code}}" {{#default}}selected="selected"{{/default}}>{{lang}}</option>
@ -417,16 +407,14 @@
<div class="input-group input-append w-100">
<input id="caption-audio-url-input" class="form-control tiny_media_url_entry" type="url" size="32"/>
{{#showfilepickertrack}}
<span class="input-group-append">
<button class="btn btn-secondary openmediabrowser" type="button">{{#str}} browserepositories, tiny_media {{/str}}</button>
</span>
{{/showfilepickertrack}}
</div>
</div>
</div>
<div class="mb-3">
<label class="w-100" for="caption-audio-lang-input">{{#str}} srclang, tiny_media {{/str}}</label>
<select id="caption-audio-lang-input" class="custom-select tiny_media_track_lang_entry">
<select id="caption-audio-lang-input" class="form-select tiny_media_track_lang_entry">
<optgroup label="{{#str}} languagesinstalled, tiny_media {{/str}}">
{{#langsinstalled}}
<option value="{{code}}" {{#default}}selected="selected"{{/default}}>{{lang}}</option>
@ -477,16 +465,14 @@
<div class="input-group input-append w-100">
<input id="description-audio-url-input" class="form-control tiny_media_url_entry" type="url" size="32" value="{{src}}"/>
{{#showfilepickertrack}}
<span class="input-group-append">
<button class="btn btn-secondary openmediabrowser" type="button">{{#str}} browserepositories, tiny_media {{/str}}</button>
</span>
{{/showfilepickertrack}}
</div>
</div>
</div>
<div class="mb-3">
<label class="w-100" for="description-audio-lang-input">{{#str}} srclang, tiny_media {{/str}}</label>
<select id="description-audio-lang-input" class="custom-select tiny_media_track_lang_entry" data-value="{{srclang}}">
<select id="description-audio-lang-input" class="form-select tiny_media_track_lang_entry" data-value="{{srclang}}">
<optgroup label="{{#str}} languagesinstalled, tiny_media {{/str}}">
{{#langsinstalled}}
<option value="{{code}}" {{#default}}selected="selected"{{/default}}>{{lang}}</option>
@ -529,16 +515,14 @@
<div class="input-group input-append w-100">
<input id="description-audio-url-input" class="form-control tiny_media_url_entry" type="url" size="32"/>
{{#showfilepickertrack}}
<span class="input-group-append">
<button class="btn btn-secondary openmediabrowser" type="button">{{#str}} browserepositories, tiny_media {{/str}}</button>
</span>
{{/showfilepickertrack}}
</div>
</div>
</div>
<div class="mb-3">
<label class="w-100" for="description-audio-lang-input">{{#str}} srclang, tiny_media {{/str}}</label>
<select id="description-audio-lang-input" class="custom-select tiny_media_track_lang_entry">
<select id="description-audio-lang-input" class="form-select tiny_media_track_lang_entry">
<optgroup label="{{#str}} languagesinstalled, tiny_media {{/str}}">
{{#langsinstalled}}
<option value="{{code}}" {{#default}}selected="selected"{{/default}}>{{lang}}</option>
@ -589,16 +573,14 @@
<div class="input-group input-append w-100">
<input id="chapter-audio-url-input" class="form-control tiny_media_url_entry" type="url" size="32" value="{{src}}"/>
{{#showfilepickertrack}}
<span class="input-group-append">
<button class="btn btn-secondary openmediabrowser" type="button">{{#str}} browserepositories, tiny_media {{/str}}</button>
</span>
{{/showfilepickertrack}}
</div>
</div>
</div>
<div class="mb-3">
<label class="w-100" for="chapter-audio-lang-input">{{#str}} srclang, tiny_media {{/str}}</label>
<select id="chapter-audio-lang-input" class="custom-select tiny_media_track_lang_entry" data-value="{{srclang}}">
<select id="chapter-audio-lang-input" class="form-select tiny_media_track_lang_entry" data-value="{{srclang}}">
<optgroup label="{{#str}} languagesinstalled, tiny_media {{/str}}">
{{#langsinstalled}}
<option value="{{code}}" {{#default}}selected="selected"{{/default}}>{{lang}}</option>
@ -641,16 +623,14 @@
<div class="input-group input-append w-100">
<input id="chapter-audio-url-input" class="form-control tiny_media_url_entry" type="url" size="32"/>
{{#showfilepickertrack}}
<span class="input-group-append">
<button class="btn btn-secondary openmediabrowser" type="button">{{#str}} browserepositories, tiny_media {{/str}}</button>
</span>
{{/showfilepickertrack}}
</div>
</div>
</div>
<div class="mb-3">
<label class="w-100" for="chapter-audio-lang-input">{{#str}} srclang, tiny_media {{/str}}</label>
<select id="chapter-audio-lang-input" class="custom-select tiny_media_track_lang_entry">
<select id="chapter-audio-lang-input" class="form-select tiny_media_track_lang_entry">
<optgroup label="{{#str}} languagesinstalled, tiny_media {{/str}}">
{{#langsinstalled}}
<option value="{{code}}" {{#default}}selected="selected"{{/default}}>{{lang}}</option>
@ -702,16 +682,14 @@
<div class="input-group input-append w-100">
<input id="metadata-audio-url-input" class="form-control tiny_media_url_entry" type="url" size="32" value="{{src}}"/>
{{#showfilepickertrack}}
<span class="input-group-append">
<button class="btn btn-secondary openmediabrowser" type="button">{{#str}} browserepositories, tiny_media {{/str}}</button>
</span>
{{/showfilepickertrack}}
</div>
</div>
</div>
<div class="mb-3">
<label class="w-100" for="metadata-audio-lang-input">{{#str}} srclang, tiny_media {{/str}}</label>
<select id="metadata-audio-lang-input" class="custom-select tiny_media_track_lang_entry" data-value="{{srclang}}">
<select id="metadata-audio-lang-input" class="form-select tiny_media_track_lang_entry" data-value="{{srclang}}">
<optgroup label="{{#str}} languagesinstalled, tiny_media {{/str}}">
{{#langsinstalled}}
<option value="{{code}}" {{#default}}selected="selected"{{/default}}>{{lang}}</option>
@ -754,16 +732,14 @@
<div class="input-group input-append w-100">
<input id="metadata-audio-url-input" class="form-control tiny_media_url_entry" type="url" size="32"/>
{{#showfilepickertrack}}
<span class="input-group-append">
<button class="btn btn-secondary openmediabrowser" type="button">{{#str}} browserepositories, tiny_media {{/str}}</button>
</span>
{{/showfilepickertrack}}
</div>
</div>
</div>
<div class="mb-3">
<label class="w-100" for="metadata-audio-lang-input">{{#str}} srclang, tiny_media {{/str}}</label>
<select id="metadata-audio-lang-input" class="custom-select tiny_media_track_lang_entry">
<select id="metadata-audio-lang-input" class="form-select tiny_media_track_lang_entry">
<optgroup label="{{#str}} languagesinstalled, tiny_media {{/str}}">
{{#langsinstalled}}
<option value="{{code}}" {{#default}}selected="selected"{{/default}}>{{lang}}</option>

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