/** * Moodle forms HTML isn't changeable via renderers (yet?) so this * .less file imports styles from the bootstrap @variables file and * adds them to the existing Moodle form CSS ids and classes. * */ form { margin: 0; } .mform fieldset .advancedbutton { text-align: right; } .jsenabled .mform .containsadvancedelements .advanced { display: none; } .mform .containsadvancedelements .advanced.show { display: block; } .mform fieldset.group { margin-bottom: 0; } .mform fieldset.error { border: 1px solid @errorText; } .mform span.error, #adminsettings span.error { display: inline-block; border: 1px solid @errorBorder; border-radius: 4px; background-color: @errorBackground; padding: 4px; margin-bottom: 4px; } .mform fieldset.collapsible legend a.fheader { padding: 0 5px 0 20px; margin-left: -20px; background: url([[pix:t/expanded]]) 2px center no-repeat; } .dir-rtl .mform fieldset.collapsible legend a.fheader { padding: 0 20px 0 5px; margin-right: -20px; margin-left: 0; background-position: right center; } .mform fieldset.collapsed legend a.fheader { background-image: url([[pix:t/collapsed]]); } .dir-rtl .mform fieldset.collapsed legend a.fheader { background-image: url([[pix:t/collapsed_rtl]]); } .jsenabled .mform .collapsed .fcontainer { display: none; } .mform .fitem .fitemtitle div { display: inline; } #adminsettings .error, .loginpanel .error, .mform .error { color: @errorText; } .mform .fdescription.required { margin-left: @horizontalComponentOffset; } .mform .fpassword .unmask { display: inline-block; margin-left: 0.5em; & > input { margin: 0; } & > label { display: inline-block; } } .mform label { display: inline-block; } .mform .iconhelp { margin-left: 4px; } .dir-rtl .mform .iconhelp { margin-right: 4px; } .mform .ftextarea #id_alltext { width: 100%; } .mform ul.file-list { padding: 0; margin: 0; list-style: none; } .mform label .req, .mform label .adv { cursor: help; } .mform .fcheckbox input { margin-left: 0; } .mform .fcheckbox > span, .mform .fradio > span, .mform .fgroup > span { display: inline-block; margin-top: 5px; } .mform .fitem fieldset.fgroup label, .mform fieldset.fdate_selector label { display: inline; float: none; width: auto; } .mform .ftags label.accesshide { display: block; position: static; } .mform .ftags select { margin-bottom: 0.7em; min-width: 22em; } .mform .helplink img { margin: 0 .45em; padding: 0; } .mform legend .helplink img { margin: 0 .2em; } .singleselect label { margin-right: .3em; } .dir-rtl .singleselect label { margin-left: .3em; margin-right: 0; } input#id_externalurl { direction: ltr; } #portfolio-add-button { display: inline; } // Copying in Bootstrap styles. .form-item, .mform .fitem { .form-horizontal .control-group; margin-bottom: 10px; // Theres's a mysterious extra 10px inside this item, // so reduce margin by 10px from 20px standard to compensate. } .form-item .form-label, .mform .fitem div.fitemtitle { .form-horizontal .control-label } .dir-rtl { .form-item .form-label, .mform .fitem div.fitemtitle { float: right; text-align: left; } } .form-defaultinfo, .form-label .form-shortname { .muted; } .form-label .form-shortname { font-size: @fontSizeMini; display: block; } .dir-rtl .form-label .form-shortname { text-align: left; } .form-item .form-setting, .form-item .form-description, .mform .fitem .felement, #page-mod-forum-search .c1 { .form-horizontal .controls } .formsettingheading { .form-horizontal .help-block } // Moodle doesn't differentiate between what Bootstrap calls // .uneditable-inputs and form help text. Styling them both as // uneditable looks ugly, styling both as form help is fairly // subtle in it's impact. Going for the latter as the best option. .form-item .form-description, .felement.fstatic { .help-block; padding-top: 5px; } .form-item .form-description { padding-top: 0; } .fitem .fstaticlabel { font-weight: bold; } // Pale grey container for submit buttons. table#form td.submit, .form-buttons, .path-admin .buttons, #fitem_id_submitbutton, .fp-content-center form + div, div.backup-section + form, #fgroup_id_buttonar { .form-actions; padding-left: 0; } .path-admin .buttons, .form-buttons { // Add back the padding it would usually get from being inside a .form-horizontal. padding-left: @horizontalComponentOffset; } .dir-rtl { table#form td.submit, .form-buttons, .path-admin .buttons, #fitem_id_submitbutton, .fp-content-center form + div, div.backup-section + form, #fgroup_id_buttonar { .form-actions; padding-right: 0; } .path-admin .buttons, .form-buttons { // Add back the padding it would usually get from being inside a .form-horizontal. padding-right: @horizontalComponentOffset; } } .form-item .form-setting .form-checkbox.defaultsnext { // Need to specify .defaultsnext and the .form-checkbox class // is somewhat randomly re-used on various actual checkboxes // throughout the admin forms, instead of on the wrapper div. margin-top: 5px; // Push down checkboxes to align. display: inline-block; // So above style sticks. } #adminsettings h3 { // Copied from bootstrap/forms.less tag legend. display: block; width: 100%; padding: 0; margin-bottom: @baseLineHeight; font-size: @baseFontSize * 1.5; line-height: @baseLineHeight * 2; color: @grayDark; border: 0; border-bottom: 1px solid #e5e5e5; } .mform legend a, .mform legend a:hover { color: @textColor; text-decoration: none; } .dir-rtl .mform .fitem .felement { margin-right: 30%; margin-left: auto; text-align: right; } // I think this could be avoided (or at least tidied up) ifr // we used HTML5 input types like url, phone, email, number etc. .dir-rtl .mform .fitem .felement input[name=email], .dir-rtl .mform .fitem .felement input[name=email2], .dir-rtl .mform .fitem .felement input[name=url], .dir-rtl .mform .fitem .felement input[name=idnumber], .dir-rtl .mform .fitem .felement input[name=phone1], .dir-rtl .mform .fitem .felement input[name=phone2] { text-align: left; direction: ltr; } .dir-rtl #id_s__pathtodu, .dir-rtl #id_s__aspellpath, .dir-rtl #id_s__pathtodot, .dir-rtl #id_s__supportemail, .dir-rtl #id_s__supportpage, .dir-rtl #id_s__sessioncookie, .dir-rtl #id_s__sessioncookiepath, .dir-rtl #id_s__sessioncookiedomain, .dir-rtl #id_s__proxyhost, .dir-rtl #id_s__proxyuser, .dir-rtl #id_s__proxypassword, .dir-rtl #id_s__proxybypass, .dir-rtl #id_s__jabberhost, .dir-rtl #id_s__jabberserver, .dir-rtl #id_s__jabberusername, .dir-rtl #id_s__jabberpassword, .dir-rtl #id_s__additionalhtmlhead, .dir-rtl #id_s__additionalhtmltopofbody, .dir-rtl #id_s__additionalhtmlfooter, .dir-rtl #id_s__docroot, .dir-rtl #id_s__filter_tex_latexpreamble, .dir-rtl #id_s__filter_tex_latexbackground, .dir-rtl #id_s__filter_tex_pathlatex, .dir-rtl #id_s__filter_tex_pathdvips, .dir-rtl #id_s__filter_tex_pathconvert, .dir-rtl #id_s__blockedip, .dir-rtl #id_s__pathtoclam, .dir-rtl #id_s__quarantinedir, .dir-rtl #id_s__sitepolicy, .dir-rtl #id_s__sitepolicyguest, .dir-rtl #id_s__cronremotepassword, .dir-rtl #id_s__allowedip, .dir-rtl #id_s__blockedip, .dir-rtl #id_s_enrol_meta_nosyncroleids, .dir-rtl #id_s_enrol_ldap_host_url, .dir-rtl #id_s_enrol_ldap_ldapencoding, .dir-rtl #id_s_enrol_ldap_bind_dn, .dir-rtl #id_s_enrol_ldap_bind_pw, .dir-rtl #admin-emoticons .form-text, .dir-rtl #admin-role_mapping input[type=text], .dir-rtl #id_s_enrol_paypal_paypalbusiness, .dir-rtl #id_s_enrol_flatfile_location, #page-admin-setting-enrolsettingsflatfile.dir-rtl input[type=text], #page-admin-setting-enrolsettingsdatabase.dir-rtl input[type=text], #page-admin-auth-db.dir-rtl input[type=text] { direction: ltr; } #page-admin-setting-enrolsettingsflatfile.dir-rtl .informationbox { direction: ltr; text-align: left; } #page-admin-grade-edit-scale-edit.dir-rtl .error input#id_name { margin-right: 170px; } #page-grade-edit-outcome-course .courseoutcomes { margin-left: auto; margin-right: auto; width: 100%; } #page-grade-edit-outcome-course .courseoutcomes td { text-align: center; } /* Install Process' text fields Forms, should always be justified to the left */ #installform #id_wwwroot, #installform #id_dirroot, #installform #id_dataroot, #installform #id_dbhost, #installform #id_dbname, #installform #id_dbuser, #installform #id_dbpass, #installform #id_prefix { direction: ltr; } .mdl-right > label { // Workaround for repository pop-up because the : are outside the label, // can/should be fixed in filemanager renderers. display: inline-block; } // Checkbox labels. Bootstrap puts the associated checkbox inside the label. // Moodle puts it beside the label, so we need to make it inline-block // to keep it on the same horizontal level. input[type="radio"] + label, input[type="checkbox"] + label { display: inline; padding-left: 0.2em; } input[type="radio"], input[type="checkbox"] { margin-top: -4px; // Dodgy hack, must be better way. margin-right: 7px; } .dir-rtl { input[type="radio"], input[type="checkbox"] { margin-left: 7px; margin-right: auto; } } .singleselect { display: inline-block; form, select { margin: 0; } } .form-item .form-label label { margin-bottom: 0; } .dir-rtl .form-item .form-label label { text-align: left; } .felement.ffilepicker { margin-top: 5px; } div#dateselector-calendar-panel { z-index: 3100; /* Set higher than the z-index of the filemanager - see MDL-39047. */ } fieldset.coursesearchbox label { display: inline; } /** * Show the labels above text editors and file managers except on wide screens. */ #region-main .mform:not(.unresponsive) .fitem .fitemtitle label { font-weight: bold; } .makeFormsVertical() { #region-main .mform:not(.unresponsive) { .fitem { .fitemtitle { display: block; margin-top: 4px; margin-bottom: 4px; text-align: left; width: 100%; } .felement { margin-left: 0; width: 100%; float: left; padding-left: 0; padding-right: 0; } .fstatic:empty { display: none; } .fcheckbox > span, .fradio > span, .fgroup > span { margin-top: 4px; } } .femptylabel { .fitemtitle { display: inline-block; width: auto; margin-right: 8px; } .felement { display: inline-block; margin-top: 4px; padding-top: 5px; width: auto; } } .fitem_fcheckbox { .fitemtitle, .felement { display: inline-block; width: auto; } .felement { padding: 6px; } } } &.dir-rtl #region-main .mform:not(.unresponsive) { .femptylabel .fitemtitle { margin-right: 0px; margin-left: 8px; } .fitem { .fitemtitle { text-align: right; } .felement { margin-right: 0; float: right; padding-right: 0; padding-left: 0; } } .fitem_fcheckbox .felement { float: right; } } } /** * Make forms vertical when the screen is less than 1200px; */ @media (max-width: 1199px) { body { .makeFormsVertical; } } /** * Make forms vertical when the screen is less than 1474px AND both side-pre and side-post contain blocks. * This is an extra special media rule. * It causes forms to show vertically when the screen size is calculated as: * 1199px + (1199px * 23%) * Where 23% is the width of span3 * Full calculation is: * @maxWidthForVerticalForms: 1199px * (unit(((@fluidGridColumnWidth1200 * 3) + * (@fluidGridGutterWidth * (3 - 1)))) / 100) + 1199px; */ @maxWidthForVerticalForms: 1474px; @media (max-width: @maxWidthForVerticalForms) { .used-region-side-pre.used-region-side-post { .makeFormsVertical; } } /* Section and module editing forms contain special JS components for the availability system (if enabled). */ #fitem_id_availabilityconditionsjson { *[aria-hidden=true] { display: none; } select, input[type=text] { position: relative; top: 4px; } label { display: inline; } .availability-group { margin-right: 8px; } .availability-item { margin-bottom: 6px; } .availability-none { margin-left: 20px; margin-bottom: 4px; } .availability-plugincontrols { padding: 2px 0px 0px 4px; background: none repeat scroll 0% 0% @wellBackground; border: 1px solid @grayLighter; border-radius: 4px; display: inline-block; margin-right: 8px; } /* Eye icon in front of an item and delete icon after it. */ .availability-eye, .availability-delete { margin-right: 8px; } /* Hidden eye icon still takes up space. */ .availability-eye[aria-hidden=true] { display: inline; visibility: hidden; } /* Eye icons in front of child lists are aligned specially. */ .availability-list > .availability-eye img { vertical-align: top; margin-top: 12px; } /* Add button lines up with child elements. */ .availability-button { margin-left: 15px; } /* Nested section is grey. */ .availability-childlist > .availability-inner { display: inline-block; background: @wellBackground; border: 1px solid @grayLighter; border-radius: 4px; padding: 6px; margin-bottom: 6px; } /* Second (and more) levels of nested sections are white. */ .availability-childlist .availability-childlist > .availability-inner { background: white; } /* Connecting text needs to be indented. */ .availability-connector { margin-left: 20px; margin-bottom: 6px; } } .dir-rtl #fitem_id_availabilityconditionsjson { .availability-group { margin-right: 0; margin-left: 8px; } .availability-none { margin-right: 20px; margin-left: 0; } .availability-plugincontrols { padding-right: 4px; padding-left: 0px; margin-right: 0; margin-left: 8px; } .availability-eye, .availability-delete { margin-left: 8px; margin-right: 0; } .availability-button { margin-right: 15px; margin-left: 0; } .availability-connector { margin-right: 20px; margin-left: 0; } } /* Default form styling colours all text red. With availability conditions this looks excessive as we show 'Invalid' markers in specific places. */ .mform .error .availability-field { color: @textColor; } /* This dialogue is used to add an availability condition. */ .availability-dialogue { .moodle-dialogue .moodle-dialogue-bd { padding-left: 0; padding-right: 0; padding-bottom: 2px; } ul { display: block; margin: 0; } li { display: block; list-style-type: none; padding: 0 0 4px; clear: both; border-bottom: 1px solid @grayLighter; margin-bottom: 4px; } ul button { float: left; margin-left: 1em; min-width: 140px; margin-top: 4px; } label { margin-left: 170px; margin-right: 1em; margin-bottom: 0; } .availability-buttons button { margin-left: 1em; margin-right: 1em; margin-top: 4px; } } .dir-rtl .availability-dialogue { ul button { float: right; margin-right: 1em; margin-left: 0; } label { margin-right: 170px; margin-left: 1em; } } /* Revert to the non-fixed width where a textarea has the number of columns specified, or an input has it's size specified. */ textarea[cols], input[size] { width: auto; } /* Custom styles for autocomplete form element */ .form-autocomplete-selection { margin: 0.2em; min-height: 21px; } .form-autocomplete-multiple [role=listitem] { cursor: pointer; } .form-autocomplete-suggestions { position: absolute; background-color: white; border: 2px solid @grayLighter; border-radius: 3px; min-width: 206px; max-height: 20em; overflow: auto; margin: 0px; padding: 0px; margin-top: -0.2em; z-index: 1; } .form-autocomplete-suggestions li { list-style-type: none; padding: 0.2em; margin: 0; cursor: pointer; color: @textColor; } .form-autocomplete-suggestions li:hover { background-color: lighten(@dropdownLinkBackgroundActive, 15%); color: @dropdownLinkColorActive; } .form-autocomplete-suggestions li[aria-selected=true] { background-color: darken(@navbarBackground, 5%); color: @gray; } .form-autocomplete-downarrow { color: @textColor; position: relative; top: -0.3em; left: -1.5em; cursor: pointer; } .dir-rtl .form-autocomplete-downarrow { right: -1.5em; left: inherit; } .form-autocomplete-selection:focus { outline: none; } .form-autocomplete-selection [data-active-selection=true] { padding: 0.5em; font-size: large; }