MDL-86716 courseformat: Remove separator on Activity chooser

This commit is contained in:
Amaia Anabitarte
2025-09-22 16:22:01 +02:00
parent 74ee977521
commit 9fe035a107
7 changed files with 29 additions and 25 deletions
@@ -6,6 +6,6 @@ define("core_courseformat/local/activitychooser/exporter",["exports","core/str"]
* @copyright 2025 Ferran Recio <ferran@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
const activityCategories=["administration","assessment","collaboration","communication","content","interactivecontent"];let allStrings=null;loadNecessaryStrings();async function loadNecessaryStrings(){if(null!==allStrings)return allStrings;allStrings={};const stringToLoad=[{key:"all",component:"core"},{key:"yes",component:"core"},{key:"no",component:"core"},{key:"favourites",component:"core"},{key:"recommended",component:"core"},{key:"gradable",component:"core"},{key:"recommended_help",component:"core_course"},...activityCategories.map((key=>({key:"mod_purpose_"+key,component:"core_course"}))),...activityCategories.map((key=>({key:"mod_purpose_"+key+"_help",component:"core_course"})))],loadedStrings=await(0,_str.getStrings)(stringToLoad);return stringToLoad.forEach(((_ref,index)=>{let{key:key}=_ref;allStrings[key]=loadedStrings[index]})),allStrings}return _exports.default=class{getTabData(tabId,filteredModules,tabLabel){let tabHelp=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;const result={tabId:tabId,active:arguments.length>4&&void 0!==arguments[4]&&arguments[4],items:filteredModules,displayed:filteredModules.length>0,tabLabel:tabLabel};return tabHelp&&(result.tabHelp=tabHelp),result}normaliseModulesData(modulesData){if(modulesData instanceof Map)modulesData=Array.from(modulesData.values());else if(!Array.isArray(modulesData))throw new Error("Invalid modules data format. Expected an array or a Map.");return modulesData}async getModChooserTemplateData(modulesData){modulesData=this.normaliseModulesData(modulesData);const allStrings=await loadNecessaryStrings(),favouriteTab=await this.getFavouriteTabData(modulesData),tabs=[{...this.getTabData("all",modulesData,allStrings.all,null,!favouriteTab.displayed),hasSearchResults:!0},favouriteTab,{...this.getTabData("recommended",modulesData.filter((mod=>!0===mod.recommended)),allStrings.recommended,allStrings.recommended_help),separator:!0}];return activityCategories.forEach((category=>{const categoryModules=modulesData.filter((mod=>mod.purpose==category||mod.otherpurpose==category));0!==categoryModules.length&&tabs.push(this.getTabData(category,categoryModules,allStrings["mod_purpose_"+category],allStrings["mod_purpose_"+category+"_help"]))})),{modules:modulesData,tabs:tabs}}async getModuleHelpTemplateData(moduleData){const allStrings=await loadNecessaryStrings(),data={...moduleData,purposes:[]};for(const purposeField of["purpose","otherpurpose"])moduleData[purposeField]&&activityCategories.includes(moduleData[purposeField])&&data.purposes.push({purposename:moduleData[purposeField],purposelabel:allStrings["mod_purpose_".concat(moduleData[purposeField])]});return data.details=[{label:allStrings.gradable,value:moduleData.gradable?allStrings.yes:allStrings.no}],data}async getFavouriteTabData(modulesData){modulesData=this.normaliseModulesData(modulesData);const allStrings=await loadNecessaryStrings(),favouriteModules=modulesData.filter((mod=>!0===mod.favourite));return this.getTabData("favourites",favouriteModules,allStrings.favourites,null,favouriteModules.length>0)}getSearchResultData(searchQuery,resultsModulesData){return{searchresultsnumber:(resultsModulesData=this.normaliseModulesData(resultsModulesData)).length,searchresults:resultsModulesData,hasresults:resultsModulesData.length>0,searchquery:searchQuery}}countTabItems(tabData){var _tabData$items$length,_tabData$items;return null!==(_tabData$items$length=null===(_tabData$items=tabData.items)||void 0===_tabData$items?void 0:_tabData$items.length)&&void 0!==_tabData$items$length?_tabData$items$length:0}getFooterData(footerData){return{activeFooter:footerData.customfootertemplate}}},_exports.default}));
const activityCategories=["administration","assessment","collaboration","communication","content","interactivecontent"];let allStrings=null;loadNecessaryStrings();async function loadNecessaryStrings(){if(null!==allStrings)return allStrings;allStrings={};const stringToLoad=[{key:"all",component:"core"},{key:"yes",component:"core"},{key:"no",component:"core"},{key:"favourites",component:"core"},{key:"recommended",component:"core"},{key:"gradable",component:"core"},{key:"recommended_help",component:"core_course"},...activityCategories.map((key=>({key:"mod_purpose_"+key,component:"core_course"}))),...activityCategories.map((key=>({key:"mod_purpose_"+key+"_help",component:"core_course"})))],loadedStrings=await(0,_str.getStrings)(stringToLoad);return stringToLoad.forEach(((_ref,index)=>{let{key:key}=_ref;allStrings[key]=loadedStrings[index]})),allStrings}return _exports.default=class{getTabData(tabId,filteredModules,tabLabel){let tabHelp=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;const result={tabId:tabId,active:arguments.length>4&&void 0!==arguments[4]&&arguments[4],items:filteredModules,displayed:filteredModules.length>0,tabLabel:tabLabel};return tabHelp&&(result.tabHelp=tabHelp),result}normaliseModulesData(modulesData){if(modulesData instanceof Map)modulesData=Array.from(modulesData.values());else if(!Array.isArray(modulesData))throw new Error("Invalid modules data format. Expected an array or a Map.");return modulesData}async getModChooserTemplateData(modulesData){modulesData=this.normaliseModulesData(modulesData);const allStrings=await loadNecessaryStrings(),favouriteTab=await this.getFavouriteTabData(modulesData),tabs=[{...this.getTabData("all",modulesData,allStrings.all,null,!favouriteTab.displayed),hasSearchResults:!0},favouriteTab,{...this.getTabData("recommended",modulesData.filter((mod=>!0===mod.recommended)),allStrings.recommended,allStrings.recommended_help),separator:!0}];return activityCategories.forEach((category=>{const categoryModules=modulesData.filter((mod=>mod.purpose==category||mod.otherpurpose==category));0!==categoryModules.length&&tabs.push(this.getTabData(category,categoryModules,allStrings["mod_purpose_"+category],allStrings["mod_purpose_"+category+"_help"]))})),{modules:modulesData,tabs:tabs}}async getModuleHelpTemplateData(moduleData){const allStrings=await loadNecessaryStrings(),data={...moduleData,purposes:[]};for(const purposeField of["purpose","otherpurpose"])moduleData[purposeField]&&activityCategories.includes(moduleData[purposeField])&&data.purposes.push({purposename:moduleData[purposeField],purposelabel:allStrings["mod_purpose_".concat(moduleData[purposeField])]});return data.haspurposes=data.purposes.length>0,data.details=[{label:allStrings.gradable,value:moduleData.gradable?allStrings.yes:allStrings.no}],data}async getFavouriteTabData(modulesData){modulesData=this.normaliseModulesData(modulesData);const allStrings=await loadNecessaryStrings(),favouriteModules=modulesData.filter((mod=>!0===mod.favourite));return this.getTabData("favourites",favouriteModules,allStrings.favourites,null,favouriteModules.length>0)}getSearchResultData(searchQuery,resultsModulesData){return{searchresultsnumber:(resultsModulesData=this.normaliseModulesData(resultsModulesData)).length,searchresults:resultsModulesData,hasresults:resultsModulesData.length>0,searchquery:searchQuery}}countTabItems(tabData){var _tabData$items$length,_tabData$items;return null!==(_tabData$items$length=null===(_tabData$items=tabData.items)||void 0===_tabData$items?void 0:_tabData$items.length)&&void 0!==_tabData$items$length?_tabData$items$length:0}getFooterData(footerData){return{activeFooter:footerData.customfootertemplate}}},_exports.default}));
//# sourceMappingURL=exporter.min.js.map
File diff suppressed because one or more lines are too long
@@ -186,6 +186,7 @@ export default class {
purposelabel: allStrings[`mod_purpose_${moduleData[purposeField]}`],
});
}
data.haspurposes = data.purposes.length > 0;
// The rest of details are displayed as a simpler list.
data.details = [
{
@@ -31,7 +31,8 @@
"componentname": "mod_assign",
"favourite": 1,
"purpose": "collaboration",
"categories": "Collaboration, Communication"
"categories": "Collaboration, Communication",
"haspurposes": true
}
}}
<div
@@ -65,25 +66,27 @@
<div
class="activitychooser-option-details"
>
{{! Purposes panel. }}
<div class="modchooser-detail">
<p class="visually-hidden">
{{#str}} supports, course{{/str}}
</p>
<ul class="list-unstyled modchoosernav nav nav-pills d-flex gap-2 flex-column">
{{#purposes}}
<li>
<button
class="nav-item nav-link border"
data-action="chooser-display-category"
data-category="{{purposename}}"
>
{{purposelabel}}
</button>
</li>
{{/purposes}}
</ul>
</div>
{{#haspurposes}}
{{! Purposes panel. }}
<div class="modchooser-detail">
<p class="visually-hidden">
{{#str}} supports, course{{/str}}
</p>
<ul class="list-unstyled modchoosernav nav nav-pills d-flex gap-2 flex-column">
{{#purposes}}
<li>
<button
class="nav-item nav-link border"
data-action="chooser-display-category"
data-category="{{purposename}}"
>
{{purposelabel}}
</button>
</li>
{{/purposes}}
</ul>
</div>
{{/haspurposes}}
{{#details}}
<div class="modchooser-detail">
{{! Detail name and value. }}
@@ -230,7 +230,7 @@
.activitychooser-option-details {
min-width: 15rem;
.modchooser-detail:not(:last-child) {
.modchooser-detail:not(:last-child):not(:only-child) {
margin-bottom: map-get($spacers, 4);
padding-bottom: map-get($spacers, 4);
border-bottom: $border-width $border-style $border-color;
+1 -1
View File
@@ -31878,7 +31878,7 @@ table.calendartable caption {
.modchooser .optionsummary .activitychooser-option-details {
min-width: 15rem;
}
.modchooser .optionsummary .activitychooser-option-details .modchooser-detail:not(:last-child) {
.modchooser .optionsummary .activitychooser-option-details .modchooser-detail:not(:last-child):not(:only-child) {
margin-bottom: 1.5rem;
padding-bottom: 1.5rem;
border-bottom: 1px solid #dee2e6;
+1 -1
View File
@@ -31878,7 +31878,7 @@ table.calendartable caption {
.modchooser .optionsummary .activitychooser-option-details {
min-width: 15rem;
}
.modchooser .optionsummary .activitychooser-option-details .modchooser-detail:not(:last-child) {
.modchooser .optionsummary .activitychooser-option-details .modchooser-detail:not(:last-child):not(:only-child) {
margin-bottom: 1.5rem;
padding-bottom: 1.5rem;
border-bottom: 1px solid #dee2e6;