Reworked sidebar
This commit is contained in:
parent
886a11d99e
commit
12efb061f1
2
amd/build/studyplan-editor-components.min.js
vendored
2
amd/build/studyplan-editor-components.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
amd/build/treestudyplan-components.min.js
vendored
2
amd/build/treestudyplan-components.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
3
amd/build/util/psidebar-vue.min.js
vendored
Normal file
3
amd/build/util/psidebar-vue.min.js
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
define("local_treestudyplan/util/psidebar-vue",["exports","./css-calc"],(function(_exports,_cssCalc){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;var _default={install(Vue){Vue.component("p-sidebar",{props:{value:{type:Boolean,default:!0},right:{type:Boolean,default:!1},shadow:{type:Boolean,default:!1},target:{type:String,default:"body"},offsetRef:{type:String,default:""}},data:()=>({wrapper:null,contentwrapper:null,resizeobserver:null}),computed:{},methods:{initWrappers(target){this.wrapper=document.querySelector("#p-sidebar-wrapper"),this.wrapper||(this.wrapper=document.createElement("div"),this.wrapper.setAttribute("id","p-sidebar-wrapper")),this.contentwrapper=document.querySelector("#p-sidebar-contentwrapper"),this.contentwrapper||(this.contentwrapper=document.createElement("div"),this.contentwrapper.setAttribute("id","p-sidebar-contentwrapper"),this.wrapper.appendChild(this.contentwrapper));let targetEl=document.querySelector(target);for(console.info(`Targeting '${target}' to `,targetEl),targetEl&&"HTML"!=targetEl.nodeType||(targetEl=document.querySelector("body"));targetEl.childNodes.length>0;)this.contentwrapper.appendChild(targetEl.childNodes[0]);targetEl.appendChild(this.wrapper)},rePosition(right){const el=this.$refs.container;right?this.wrapper.insertBefore(el,this.contentwrapper.nextSibling):this.wrapper.insertBefore(el,this.contentwrapper)},setOffset(reference){const ref=reference?document.querySelector(reference):null;console.info(`Setting offset from '${reference}'`,ref);let offsetTop=ref?ref.offsetTop:0;offsetTop+=0!=offsetTop?"px":"";const el=this.$refs.container;el.style.height=`calc( 100vh - ${offsetTop})`,el.style.marginTop=offsetTop}},watch:{right(newVal){this.rePosition(newVal)},offsetRef(reference){this.setOffset(reference)}},mounted(){const el=this.$refs.container;this.initWrappers(this.target),this.setOffset(this.offsetRef),this.rePosition(this.right,this.besides),this.resizeObserver=new ResizeObserver((()=>{let wx=0-el.getBoundingClientRect().width;wx+=0!=wx?"px":"",el.style.setProperty("--p-sidebar-hideoffset",wx)})),this.resizeObserver.observe(el)},unmounted(){this.resizeObserver&&this.resizeObserver.disconnect()},template:"\n <div>\n <div ref='container' \n :class=\"'p-sidebar ' + (right?'p-sidebar-right ':'') + (shadow?'p-sidebar-shadow ':'') + (value?'shown ':'hidden ')\"\n ><slot></slot></div>\n </div>\n "})}};return _exports.default=_default,_exports.default}));
|
||||||
|
|
||||||
|
//# sourceMappingURL=psidebar-vue.min.js.map
|
1
amd/build/util/psidebar-vue.min.js.map
Normal file
1
amd/build/util/psidebar-vue.min.js.map
Normal file
File diff suppressed because one or more lines are too long
3
amd/build/util/settings.min.js
vendored
Normal file
3
amd/build/util/settings.min.js
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
define("local_treestudyplan/util/settings",["exports","core/ajax","core/notification"],(function(_exports,_ajax,_notification){var obj;Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.settings=function(key){const settings=loadsettings();return key in settings?settings[key]:null},_notification=(obj=_notification)&&obj.__esModule?obj:{default:obj};let settingcache=null;function loadsettings(){return settingcache||(0,_ajax.call)([{methodname:"local_treestudyplan_getsettings",args:{}}])[0].then((function(response){settingcache=response})).catch(_notification.default.exception),settingcache}loadsettings()}));
|
||||||
|
|
||||||
|
//# sourceMappingURL=settings.min.js.map
|
1
amd/build/util/settings.min.js.map
Normal file
1
amd/build/util/settings.min.js.map
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"settings.min.js","sources":["../../src/util/settings.js"],"sourcesContent":["/*eslint no-var: \"error\" */\n/*eslint-env es6*/\n\nimport {call} from 'core/ajax';\nimport notification from 'core/notification';\n\n// Prepare default value.\nlet settingcache = null;\n\n/**\n * Check if premium status is enabled.\n * @param {String} key\n * @returns {}\n */\nexport function settings ( key ){\n const settings = loadsettings();\n if ( key in settings ) {\n return settings[key];\n } else {\n return null;\n }\n}\n\n/**\n * Get settings from server or cache\n * @returns {Object} The settings object\n */\nfunction loadsettings() {\n if (!settingcache) {\n // Retrieve setting cache if needed.\n call([{\n methodname: 'local_treestudyplan_getsettings',\n args: {}\n }])[0].then(function(response){\n settingcache = response;\n }).catch(notification.exception);\n }\n return settingcache;\n}\n\n// Preload premium status.\nloadsettings();"],"names":["key","settings","loadsettings","settingcache","methodname","args","then","response","catch","notification","exception"],"mappings":"0NAc2BA,WACjBC,SAAWC,sBACZF,OAAOC,SACDA,SAASD,KAET,8EAZXG,aAAe,cAoBVD,sBACAC,6BAEI,CAAC,CACFC,WAAY,kCACZC,KAAM,MACN,GAAGC,MAAK,SAASC,UACjBJ,aAAeI,YAChBC,MAAMC,sBAAaC,WAEnBP,aAIXD"}
|
|
@ -18,10 +18,11 @@ import Config from 'core/config';
|
||||||
import {download,upload} from './downloader';
|
import {download,upload} from './downloader';
|
||||||
import {ProcessStudyplan, ProcessStudyplanPage} from './studyplan-processor';
|
import {ProcessStudyplan, ProcessStudyplanPage} from './studyplan-processor';
|
||||||
/*import {eventTypes as editSwEventTypes} from 'core/edit_switch';*/
|
/*import {eventTypes as editSwEventTypes} from 'core/edit_switch';*/
|
||||||
import { premiumenabled, premiumstatus } from "./util/premium";
|
import { premiumenabled } from "./util/premium";
|
||||||
|
import { settings } from "./util/settings";
|
||||||
import TSComponents from './treestudyplan-components';
|
import TSComponents from './treestudyplan-components';
|
||||||
import mFormComponents from "./util/mform-helper";
|
import mFormComponents from "./util/mform-helper";
|
||||||
|
import pSideBarComponents from "./util/psidebar-vue";
|
||||||
|
|
||||||
import {Drag, Drop, DropList} from './vue-easy-dnd/vue-easy-dnd.esm';
|
import {Drag, Drop, DropList} from './vue-easy-dnd/vue-easy-dnd.esm';
|
||||||
|
|
||||||
|
@ -49,6 +50,7 @@ export default {
|
||||||
Vue.component('drop-list',DropList);
|
Vue.component('drop-list',DropList);
|
||||||
Vue.use(TSComponents);
|
Vue.use(TSComponents);
|
||||||
Vue.use(mFormComponents);
|
Vue.use(mFormComponents);
|
||||||
|
Vue.use(pSideBarComponents);
|
||||||
let debug = new Debugger("treestudyplan-editor");
|
let debug = new Debugger("treestudyplan-editor");
|
||||||
/************************************
|
/************************************
|
||||||
* *
|
* *
|
||||||
|
@ -1821,7 +1823,6 @@ export default {
|
||||||
:items="page.studylines"
|
:items="page.studylines"
|
||||||
class="t-slot-droplist"
|
class="t-slot-droplist"
|
||||||
:accepts-type="'studyline-'+page.id"
|
:accepts-type="'studyline-'+page.id"
|
||||||
xreorder="$event.apply(page.studylines)"
|
|
||||||
@reorder="reorderLines($event,page.studylines)"
|
@reorder="reorderLines($event,page.studylines)"
|
||||||
mode="copy"
|
mode="copy"
|
||||||
row
|
row
|
||||||
|
@ -1876,6 +1877,7 @@ export default {
|
||||||
<!-- add period information -->
|
<!-- add period information -->
|
||||||
<template v-for="(n,index) in (page.periods+1)">
|
<template v-for="(n,index) in (page.periods+1)">
|
||||||
<s-studyline-header-period
|
<s-studyline-header-period
|
||||||
|
mode="edit"
|
||||||
:identifier='Number(page.id)'
|
:identifier='Number(page.id)'
|
||||||
v-if="index > 0"
|
v-if="index > 0"
|
||||||
v-model="page.perioddesc[index-1]"
|
v-model="page.perioddesc[index-1]"
|
||||||
|
@ -2317,6 +2319,9 @@ export default {
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
hivizdrop() {
|
||||||
|
return settings("hivizdropslots");
|
||||||
|
},
|
||||||
onDrop(event) {
|
onDrop(event) {
|
||||||
this.hover.component = null;
|
this.hover.component = null;
|
||||||
this.hover.type = null;
|
this.hover.type = null;
|
||||||
|
@ -2474,7 +2479,7 @@ export default {
|
||||||
></t-item
|
></t-item
|
||||||
></drag
|
></drag
|
||||||
><drop v-else
|
><drop v-else
|
||||||
:class="'t-slot-drop '+type + (layer > 0?' secondary':' primary')"
|
:class="'t-slot-drop '+type + (layer > 0?' secondary':' primary') + (hivizdrop()?' hiviz':'')"
|
||||||
:accepts-type="checkType"
|
:accepts-type="checkType"
|
||||||
@drop="onDrop"
|
@drop="onDrop"
|
||||||
mode="cut"
|
mode="cut"
|
||||||
|
@ -4142,6 +4147,7 @@ export default {
|
||||||
template: `
|
template: `
|
||||||
<ul class="t-course-list">
|
<ul class="t-course-list">
|
||||||
<li class="t-course-list-item" v-for="course in value" :key="course.id">
|
<li class="t-course-list-item" v-for="course in value" :key="course.id">
|
||||||
|
<span class='t-course-heading'>
|
||||||
<drag
|
<drag
|
||||||
class="draggable-course"
|
class="draggable-course"
|
||||||
:data="course"
|
:data="course"
|
||||||
|
@ -4150,6 +4156,7 @@ export default {
|
||||||
>
|
>
|
||||||
<i class="t-course-list-item fa fa-book"></i> {{ course.shortname }} - {{ course.fullname }}
|
<i class="t-course-list-item fa fa-book"></i> {{ course.shortname }} - {{ course.fullname }}
|
||||||
</drag>
|
</drag>
|
||||||
|
</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
`,
|
`,
|
||||||
|
@ -4176,7 +4183,7 @@ export default {
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
toolboxright: true,
|
toolboxright: !(settings("toolboxleft")),
|
||||||
text: strings.toolbox,
|
text: strings.toolbox,
|
||||||
relatedbadges: [],
|
relatedbadges: [],
|
||||||
systembadges: [],
|
systembadges: [],
|
||||||
|
@ -4319,12 +4326,11 @@ export default {
|
||||||
},
|
},
|
||||||
template: `
|
template: `
|
||||||
<div class="t-toolbox">
|
<div class="t-toolbox">
|
||||||
<b-sidebar
|
<p-sidebar
|
||||||
id="toolbox-sidebar"
|
|
||||||
:right='toolboxright'
|
:right='toolboxright'
|
||||||
shadow
|
shadow
|
||||||
v-model="value"
|
v-model="value"
|
||||||
no-header
|
offsetRef="#page"
|
||||||
>
|
>
|
||||||
<div class="m-3 border-bottom-1 border-primary"><h3>{{text.toolbox}}</h3></div>
|
<div class="m-3 border-bottom-1 border-primary"><h3>{{text.toolbox}}</h3></div>
|
||||||
<div class='t-toolbox-preface'>
|
<div class='t-toolbox-preface'>
|
||||||
|
@ -4429,7 +4435,7 @@ export default {
|
||||||
</b-card>
|
</b-card>
|
||||||
</b-tab>
|
</b-tab>
|
||||||
</b-tabs>
|
</b-tabs>
|
||||||
</b-sidebar>
|
</p-sidebar>
|
||||||
</div>
|
</div>
|
||||||
`,
|
`,
|
||||||
});
|
});
|
||||||
|
|
|
@ -245,6 +245,10 @@ export default {
|
||||||
identifier: {
|
identifier: {
|
||||||
type: Number, // Page reference.
|
type: Number, // Page reference.
|
||||||
default() { return 0;}
|
default() { return 0;}
|
||||||
|
},
|
||||||
|
mode: {
|
||||||
|
type: String,
|
||||||
|
default: "view",
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
@ -302,7 +306,7 @@ export default {
|
||||||
class="s-studyline-header-period-datespan small">
|
class="s-studyline-header-period-datespan small">
|
||||||
<span class="date">{{ startdate }}</span> - <span class="date">{{ enddate }}</span>
|
<span class="date">{{ startdate }}</span> - <span class="date">{{ enddate }}</span>
|
||||||
</p>
|
</p>
|
||||||
<div v-if="current" class='s-studyline-period-highlight'></div>
|
<div v-if="current && mode == 'view'" class='s-studyline-period-highlight'></div>
|
||||||
</div>
|
</div>
|
||||||
`,
|
`,
|
||||||
});
|
});
|
||||||
|
|
132
amd/src/util/psidebar-vue.js
Normal file
132
amd/src/util/psidebar-vue.js
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
/*eslint no-unused-vars: warn */
|
||||||
|
/*eslint max-len: ["error", { "code": 160 }] */
|
||||||
|
/*eslint-disable no-trailing-spaces */
|
||||||
|
/*eslint-disable no-console */
|
||||||
|
/*eslint-env es6*/
|
||||||
|
|
||||||
|
import {calc} from "./css-calc";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
install(Vue/*,options*/){
|
||||||
|
Vue.component('p-sidebar',{
|
||||||
|
props: {
|
||||||
|
value: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true,
|
||||||
|
},
|
||||||
|
right: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
shadow: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
target: {
|
||||||
|
type: String,
|
||||||
|
default: 'body',
|
||||||
|
},
|
||||||
|
offsetRef: {
|
||||||
|
type: String,
|
||||||
|
default: '',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
wrapper: null,
|
||||||
|
contentwrapper: null,
|
||||||
|
resizeobserver: null,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
initWrappers(target) {
|
||||||
|
// First check if the sidebar wrapper already exists.
|
||||||
|
this.wrapper = document.querySelector("#p-sidebar-wrapper");
|
||||||
|
if (! this.wrapper) {
|
||||||
|
// Otherwise, create it.
|
||||||
|
this.wrapper = document.createElement("div");
|
||||||
|
this.wrapper.setAttribute("id","p-sidebar-wrapper");
|
||||||
|
}
|
||||||
|
// First check if the contentwrapper already exists
|
||||||
|
this.contentwrapper = document.querySelector("#p-sidebar-contentwrapper");
|
||||||
|
if (!this.contentwrapper) {
|
||||||
|
// Otherwise, create it.
|
||||||
|
this.contentwrapper = document.createElement("div");
|
||||||
|
this.contentwrapper.setAttribute("id","p-sidebar-contentwrapper");
|
||||||
|
this.wrapper.appendChild(this.contentwrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find containing target (otherwise use body)
|
||||||
|
let targetEl = document.querySelector(target);
|
||||||
|
console.info(`Targeting '${target}' to `,targetEl);
|
||||||
|
if (!targetEl || targetEl.nodeType == "HTML") {
|
||||||
|
targetEl = document.querySelector("body");
|
||||||
|
}
|
||||||
|
// Move all target content parts to content wrapper....
|
||||||
|
while (targetEl.childNodes.length >0) {
|
||||||
|
this.contentwrapper.appendChild(targetEl.childNodes[0]);
|
||||||
|
}
|
||||||
|
// Add sidebar wrapper to target Element
|
||||||
|
targetEl.appendChild(this.wrapper);
|
||||||
|
|
||||||
|
},
|
||||||
|
rePosition(right) {
|
||||||
|
// Place the container elsewhere in the DOM.
|
||||||
|
const el = this.$refs.container;
|
||||||
|
|
||||||
|
|
||||||
|
if(right) {
|
||||||
|
this.wrapper.insertBefore(el,this.contentwrapper.nextSibling);
|
||||||
|
} else {
|
||||||
|
this.wrapper.insertBefore(el,this.contentwrapper);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setOffset(reference) {
|
||||||
|
const ref = reference?document.querySelector(reference):null;
|
||||||
|
console.info(`Setting offset from '${reference}'`,ref);
|
||||||
|
let offsetTop = (ref?ref.offsetTop:0);
|
||||||
|
offsetTop+=(offsetTop!=0)?"px":"";
|
||||||
|
const el = this.$refs.container;
|
||||||
|
el.style.height=`calc( 100vh - ${offsetTop})`;
|
||||||
|
el.style.marginTop=offsetTop;
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
right(newVal) {
|
||||||
|
this.rePosition(newVal);
|
||||||
|
},
|
||||||
|
offsetRef(reference) {
|
||||||
|
this.setOffset(reference);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
const self = this;
|
||||||
|
const el = self.$refs.container;
|
||||||
|
this.initWrappers(this.target);
|
||||||
|
this.setOffset(this.offsetRef);
|
||||||
|
this.rePosition(this.right,this.besides);
|
||||||
|
this.resizeObserver = new ResizeObserver(() => {
|
||||||
|
let wx = 0 - el.getBoundingClientRect().width;
|
||||||
|
wx += (wx!=0)?"px":"";
|
||||||
|
el.style.setProperty("--p-sidebar-hideoffset",wx);
|
||||||
|
});
|
||||||
|
this.resizeObserver.observe(el);
|
||||||
|
},
|
||||||
|
unmounted() {
|
||||||
|
if(this.resizeObserver) {
|
||||||
|
this.resizeObserver.disconnect();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
template: `
|
||||||
|
<div>
|
||||||
|
<div ref='container'
|
||||||
|
:class="'p-sidebar ' + (right?'p-sidebar-right ':'') + (shadow?'p-sidebar-shadow ':'') + (value?'shown ':'hidden ')"
|
||||||
|
><slot></slot></div>
|
||||||
|
</div>
|
||||||
|
`,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
42
amd/src/util/settings.js
Normal file
42
amd/src/util/settings.js
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/*eslint no-var: "error" */
|
||||||
|
/*eslint-env es6*/
|
||||||
|
|
||||||
|
import {call} from 'core/ajax';
|
||||||
|
import notification from 'core/notification';
|
||||||
|
|
||||||
|
// Prepare default value.
|
||||||
|
let settingcache = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if premium status is enabled.
|
||||||
|
* @param {String} key
|
||||||
|
* @returns {}
|
||||||
|
*/
|
||||||
|
export function settings ( key ){
|
||||||
|
const settings = loadsettings();
|
||||||
|
if ( key in settings ) {
|
||||||
|
return settings[key];
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get settings from server or cache
|
||||||
|
* @returns {Object} The settings object
|
||||||
|
*/
|
||||||
|
function loadsettings() {
|
||||||
|
if (!settingcache) {
|
||||||
|
// Retrieve setting cache if needed.
|
||||||
|
call([{
|
||||||
|
methodname: 'local_treestudyplan_getsettings',
|
||||||
|
args: {}
|
||||||
|
}])[0].then(function(response){
|
||||||
|
settingcache = response;
|
||||||
|
}).catch(notification.exception);
|
||||||
|
}
|
||||||
|
return settingcache;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Preload premium status.
|
||||||
|
loadsettings();
|
|
@ -38,7 +38,7 @@ class premium extends \external_api {
|
||||||
|
|
||||||
// Toggle the variable below to enable support for premium stuff.
|
// Toggle the variable below to enable support for premium stuff.
|
||||||
// If set to false, all premium features will be enabled and no premium settings panel will be visible.
|
// If set to false, all premium features will be enabled and no premium settings panel will be visible.
|
||||||
private static $premium_supported = false;
|
private static $premium_supported = true;
|
||||||
|
|
||||||
private static $premiumcrt = "-----BEGIN CERTIFICATE-----
|
private static $premiumcrt = "-----BEGIN CERTIFICATE-----
|
||||||
MIIDSzCCAjMCFFlyhmKf1fN7U5lQL/dtlsyP24AQMA0GCSqGSIb3DQEBCwUAMGEx
|
MIIDSzCCAjMCFFlyhmKf1fN7U5lQL/dtlsyP24AQMA0GCSqGSIb3DQEBCwUAMGEx
|
||||||
|
|
|
@ -2222,6 +2222,7 @@ class studyplanservice extends \external_api {
|
||||||
*/
|
*/
|
||||||
public static function count_templates() {
|
public static function count_templates() {
|
||||||
\external_api::validate_context(\context_system::instance());
|
\external_api::validate_context(\context_system::instance());
|
||||||
|
require_login(null,false,null);
|
||||||
return studyplan::count_template();
|
return studyplan::count_template();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -142,7 +142,9 @@ class utilityservice extends \external_api {
|
||||||
* Return value description for webservice function submit_cm_editform
|
* Return value description for webservice function submit_cm_editform
|
||||||
*/
|
*/
|
||||||
public static function submit_mform_returns() : \external_description {
|
public static function submit_mform_returns() : \external_description {
|
||||||
return success::structure();
|
return new \external_multiple_structure(new \external_single_structure([
|
||||||
|
"id" => new \external_value(PARAM_INT, 'id of studyline'),
|
||||||
|
]));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -167,5 +169,37 @@ class utilityservice extends \external_api {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parameter description for webservice function submit_cm_editform
|
||||||
|
*/
|
||||||
|
public static function getsettings_parameters() : \external_function_parameters {
|
||||||
|
return new \external_function_parameters( [
|
||||||
|
] );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return value description for webservice function submit_cm_editform
|
||||||
|
*/
|
||||||
|
public static function getsettings_returns() : \external_description {
|
||||||
|
return new \external_single_structure([
|
||||||
|
"hivizdropslots" => new \external_value(PARAM_BOOL, 'High visibility drop slots for items'),
|
||||||
|
"toolboxleft" => new \external_value(PARAM_BOOL, 'Start toolbox default on left side'),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Submit specified form data into form
|
||||||
|
* @return array Success/fail structure
|
||||||
|
*/
|
||||||
|
public static function getsettings() {
|
||||||
|
\external_api::validate_context(\context_system::instance());
|
||||||
|
require_login(null,false,null);
|
||||||
|
|
||||||
|
return [
|
||||||
|
"hivizdropslots" => get_config("local_treestudyplan","hivizdropslots"),
|
||||||
|
"toolboxleft" => get_config("local_treestudyplan","toolboxleft")
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -318,17 +318,25 @@ body.path-local-treestudyplan .editmode-switch-form > * {
|
||||||
.features-treestudyplan li.t-coursecat-list-item i.t-caret {
|
.features-treestudyplan li.t-coursecat-list-item i.t-caret {
|
||||||
width: 9px;
|
width: 9px;
|
||||||
}
|
}
|
||||||
.path-local-treestudyplan li.t-coursecat-list-item,
|
.path-local-treestudyplan .t-coursecat-heading,
|
||||||
|
.path-local-treestudyplan .t-course-heading,
|
||||||
|
.features-treestudyplan .t-coursecat-heading,
|
||||||
|
.features-treestudyplan .t-course-heading {
|
||||||
|
min-width: 180px;
|
||||||
|
max-width: 240px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.path-local-treestudyplan li.t-coursecat-list-item .draggable-course,
|
||||||
.path-local-treestudyplan li.t-course-list-item .draggable-course,
|
.path-local-treestudyplan li.t-course-list-item .draggable-course,
|
||||||
.features-treestudyplan li.t-coursecat-list-item,
|
.features-treestudyplan li.t-coursecat-list-item .draggable-course,
|
||||||
.features-treestudyplan li.t-course-list-item .draggable-course {
|
.features-treestudyplan li.t-course-list-item .draggable-course {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
}
|
}
|
||||||
.path-local-treestudyplan li.t-coursecat-list-item:hover,
|
.path-local-treestudyplan li.t-coursecat-list-item .draggable-course:hover,
|
||||||
.path-local-treestudyplan li.t-course-list-item .draggable-course:hover,
|
.path-local-treestudyplan li.t-course-list-item .draggable-course:hover,
|
||||||
.features-treestudyplan li.t-coursecat-list-item:hover,
|
.features-treestudyplan li.t-coursecat-list-item .draggable-course:hover,
|
||||||
.features-treestudyplan li.t-course-list-item .draggable-course:hover {
|
.features-treestudyplan li.t-course-list-item .draggable-course:hover {
|
||||||
text-overflow: clip;
|
text-overflow: clip;
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
|
@ -421,6 +429,7 @@ body.path-local-treestudyplan .editmode-switch-form > * {
|
||||||
.path-local-treestudyplan .s-studyline-period-highlight,
|
.path-local-treestudyplan .s-studyline-period-highlight,
|
||||||
.features-treestudyplan .s-studyline-period-highlight {
|
.features-treestudyplan .s-studyline-period-highlight {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
pointer-events: none;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 50000px;
|
height: 50000px;
|
||||||
opacity: var(--highlight-mix);
|
opacity: var(--highlight-mix);
|
||||||
|
@ -493,6 +502,11 @@ body.path-local-treestudyplan .editmode-switch-form > * {
|
||||||
align-content: center;
|
align-content: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
.path-local-treestudyplan .t-slot-drop.hiviz.drop-allowed,
|
||||||
|
.features-treestudyplan .t-slot-drop.hiviz.drop-allowed {
|
||||||
|
min-height: 44px;
|
||||||
|
background-color: yellow;
|
||||||
|
}
|
||||||
.path-local-treestudyplan .t-slot-drop.competency,
|
.path-local-treestudyplan .t-slot-drop.competency,
|
||||||
.features-treestudyplan .t-slot-drop.competency {
|
.features-treestudyplan .t-slot-drop.competency {
|
||||||
min-width: 100px;
|
min-width: 100px;
|
||||||
|
@ -509,6 +523,11 @@ body.path-local-treestudyplan .editmode-switch-form > * {
|
||||||
.features-treestudyplan .t-slot-drop.secondary.drop-allowed {
|
.features-treestudyplan .t-slot-drop.secondary.drop-allowed {
|
||||||
min-height: 5px;
|
min-height: 5px;
|
||||||
}
|
}
|
||||||
|
.path-local-treestudyplan .t-slot-drop.secondary.drop-allowed.hiviz,
|
||||||
|
.features-treestudyplan .t-slot-drop.secondary.drop-allowed.hiviz {
|
||||||
|
min-height: 44px;
|
||||||
|
background-color: yellow;
|
||||||
|
}
|
||||||
.path-local-treestudyplan .t-item-deletebox,
|
.path-local-treestudyplan .t-item-deletebox,
|
||||||
.features-treestudyplan .t-item-deletebox {
|
.features-treestudyplan .t-item-deletebox {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
@ -1818,3 +1837,44 @@ body.path-local-treestudyplan .editmode-switch-form > * {
|
||||||
.features-treestudyplan .collapse.show {
|
.features-treestudyplan .collapse.show {
|
||||||
height: auto;
|
height: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#p-sidebar-wrapper {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: flex-start;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
#p-sidebar-wrapper #p-sidebar-contentwrapper {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
#p-sidebar-wrapper .p-sidebar {
|
||||||
|
position: relative;
|
||||||
|
top: 0;
|
||||||
|
min-width: 320px;
|
||||||
|
width: auto;
|
||||||
|
max-width: 430px;
|
||||||
|
height: 100vh;
|
||||||
|
max-height: 100%;
|
||||||
|
margin: 0;
|
||||||
|
outline: 0;
|
||||||
|
-webkit-transform: translateX(0);
|
||||||
|
transform: translateX(0);
|
||||||
|
background-color: var(--light);
|
||||||
|
display: block;
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
z-index: 100;
|
||||||
|
--p-sidebar-hideoffset: -320px;
|
||||||
|
}
|
||||||
|
#p-sidebar-wrapper .p-sidebar.p-sidebar-shadow {
|
||||||
|
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
#p-sidebar-wrapper .p-sidebar.shown {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#p-sidebar-wrapper .p-sidebar:not(.p-sidebar-right).hidden {
|
||||||
|
margin-left: var(--p-sidebar-hideoffset);
|
||||||
|
}
|
||||||
|
#p-sidebar-wrapper .p-sidebar.p-sidebar-right.hidden {
|
||||||
|
margin-right: var(--p-sidebar-hideoffset);
|
||||||
|
}
|
|
@ -823,5 +823,14 @@ $functions = [
|
||||||
'capabilities' => '',
|
'capabilities' => '',
|
||||||
'loginrequired' => true,
|
'loginrequired' => true,
|
||||||
],
|
],
|
||||||
|
'local_treestudyplan_getsettings' => [ // Web service function name.
|
||||||
|
'classname' => '\local_treestudyplan\utilityservice', // Class containing the external function.
|
||||||
|
'methodname' => 'getsettings', // External function name.
|
||||||
|
'description' => 'Get some studypln related settings',
|
||||||
|
'type' => 'read', // Database rights of the web service function (read, write).
|
||||||
|
'ajax' => true,
|
||||||
|
'capabilities' => '',
|
||||||
|
'loginrequired' => true,
|
||||||
|
],
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
|
@ -125,6 +125,11 @@ $string["settingdesc_courseprogressbar"] = 'Show a progress bar in the course po
|
||||||
$string["setting_infofields_heading"] = 'Extra course information fields';
|
$string["setting_infofields_heading"] = 'Extra course information fields';
|
||||||
$string["settingdesc_infofields_heading"] = 'Select up to 5 fields or custom fields to add to the course popup';
|
$string["settingdesc_infofields_heading"] = 'Select up to 5 fields or custom fields to add to the course popup';
|
||||||
|
|
||||||
|
$string["setting_hivizdropslots"] = 'High visibility drop fields';
|
||||||
|
$string["settingdesc_hivizdropslots"] = 'Give the drop fields when editing a study plan extra visibility';
|
||||||
|
|
||||||
|
$string["setting_toolboxleft"] = 'Toolbar left side by default';
|
||||||
|
$string["settingdesc_toolboxleft"] = 'Show the course and component toolbar on the left by default, instead of the right side of the screen';
|
||||||
|
|
||||||
$string["infofield_position_above"] = 'Above course results';
|
$string["infofield_position_above"] = 'Above course results';
|
||||||
$string["infofield_position_below"] = 'Below course results';
|
$string["infofield_position_below"] = 'Below course results';
|
||||||
|
|
|
@ -124,7 +124,13 @@ $string["setting_courseprogressbar"] = 'Toon voortgangsbalk in cursus';
|
||||||
$string["settingdesc_courseprogressbar"] = 'Laat een voortgangsbalk zien in de cursuspopup';
|
$string["settingdesc_courseprogressbar"] = 'Laat een voortgangsbalk zien in de cursuspopup';
|
||||||
|
|
||||||
$string["setting_infofields_heading"] = 'Extra cursusinformatie in popup';
|
$string["setting_infofields_heading"] = 'Extra cursusinformatie in popup';
|
||||||
$string["settingdesc_infofields_heading"] = 'Kies tot 5 extra velden om in het cursuspopupvenster te laten zien';
|
$string["settingdesc_infofields_heading"] = 'Kies tot 5 extra velden om in het cursuspopupvenster te laten zien.';
|
||||||
|
|
||||||
|
$string["setting_hivizdropslots"] = 'Extra zichtbare sleepvelden';
|
||||||
|
$string["settingdesc_hivizdropslots"] = 'Maak de velden waar cursussen heen gesleept kunnen worden extra goed zichtbaar.';
|
||||||
|
|
||||||
|
$string["setting_toolboxleft"] = 'Toolcox standaard links';
|
||||||
|
$string["settingdesc_toolboxleft"] = 'Toon de toolbox met cursussen en componenten standaard links in plaats van rechts.';
|
||||||
|
|
||||||
$string["infofield_position_above"] = 'Boven cursusresultaten';
|
$string["infofield_position_above"] = 'Boven cursusresultaten';
|
||||||
$string["infofield_position_below"] = 'Onder cursusresultaten';
|
$string["infofield_position_below"] = 'Onder cursusresultaten';
|
||||||
|
|
49
scss/psidebar.scss
Normal file
49
scss/psidebar.scss
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
#p-sidebar-wrapper {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: flex-start;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
#p-sidebar-contentwrapper {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-sidebar {
|
||||||
|
position: relative;
|
||||||
|
top: 0;
|
||||||
|
min-width: 320px;
|
||||||
|
width: auto;
|
||||||
|
max-width: 430px;
|
||||||
|
height: 100vh;
|
||||||
|
max-height: 100%;
|
||||||
|
margin: 0;
|
||||||
|
outline: 0;
|
||||||
|
-webkit-transform: translateX(0);
|
||||||
|
transform: translateX(0);
|
||||||
|
background-color: var(--light);
|
||||||
|
display: block;
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
z-index: 100;
|
||||||
|
--p-sidebar-hideoffset: -320px;
|
||||||
|
|
||||||
|
&.p-sidebar-shadow {
|
||||||
|
box-shadow: 0 .5rem 1rem rgba(0,0,0,.15);
|
||||||
|
}
|
||||||
|
&.shown {
|
||||||
|
display: block;
|
||||||
|
|
||||||
|
}
|
||||||
|
&:not(.p-sidebar-right).hidden {
|
||||||
|
margin-left: var(--p-sidebar-hideoffset);
|
||||||
|
}
|
||||||
|
&.p-sidebar-right.hidden {
|
||||||
|
margin-right: var(--p-sidebar-hideoffset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -211,8 +211,16 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
.t-coursecat-heading, .t-course-heading {
|
||||||
|
min-width: 180px;
|
||||||
|
max-width: 240px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
li.t-coursecat-list-item, li.t-course-list-item .draggable-course {
|
|
||||||
|
li.t-coursecat-list-item, li.t-course-list-item {
|
||||||
|
|
||||||
|
.draggable-course {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
|
@ -223,7 +231,7 @@
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
i.t-coursecat-list-item {
|
i.t-coursecat-list-item {
|
||||||
color: var(--coursecat-list);
|
color: var(--coursecat-list);
|
||||||
|
@ -307,6 +315,7 @@
|
||||||
|
|
||||||
.s-studyline-period-highlight {
|
.s-studyline-period-highlight {
|
||||||
position:absolute;
|
position:absolute;
|
||||||
|
pointer-events: none;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 50000px;
|
height: 50000px;
|
||||||
|
|
||||||
|
@ -376,6 +385,10 @@
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-content: center;
|
align-content: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
&.hiviz.drop-allowed {
|
||||||
|
min-height: 44px;
|
||||||
|
background-color: yellow;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.t-slot-drop.competency {
|
.t-slot-drop.competency {
|
||||||
|
@ -392,6 +405,10 @@
|
||||||
|
|
||||||
.t-slot-drop.secondary.drop-allowed {
|
.t-slot-drop.secondary.drop-allowed {
|
||||||
min-height: 5px;
|
min-height: 5px;
|
||||||
|
&.hiviz {
|
||||||
|
min-height: 44px;
|
||||||
|
background-color: yellow;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.t-item-deletebox {
|
.t-item-deletebox {
|
||||||
|
|
|
@ -5,3 +5,4 @@
|
||||||
@import "studyplancard.scss";
|
@import "studyplancard.scss";
|
||||||
@import "studyplan-report.scss";
|
@import "studyplan-report.scss";
|
||||||
@import "bootstraptweaking.scss";
|
@import "bootstraptweaking.scss";
|
||||||
|
@import "psidebar.scss";
|
14
settings.php
14
settings.php
|
@ -127,6 +127,20 @@ if ($hassiteconfig) {
|
||||||
false,
|
false,
|
||||||
));
|
));
|
||||||
|
|
||||||
|
//get_config("local_treestudyplan","hivizdropslots")
|
||||||
|
$page->add(new admin_setting_configcheckbox('local_treestudyplan/hivizdropslots',
|
||||||
|
get_string('setting_hivizdropslots', 'local_treestudyplan'),
|
||||||
|
get_string('settingdesc_hivizdropslots', 'local_treestudyplan'),
|
||||||
|
false,
|
||||||
|
));
|
||||||
|
|
||||||
|
//get_config("local_treestudyplan","toolboxleft")
|
||||||
|
$page->add(new admin_setting_configcheckbox('local_treestudyplan/toolboxleft',
|
||||||
|
get_string('setting_toolboxleft', 'local_treestudyplan'),
|
||||||
|
get_string('settingdesc_toolboxleft', 'local_treestudyplan'),
|
||||||
|
false,
|
||||||
|
));
|
||||||
|
|
||||||
if (premium::enabled()) {
|
if (premium::enabled()) {
|
||||||
//get_config("local_treestudyplan","enablecoach")
|
//get_config("local_treestudyplan","enablecoach")
|
||||||
$page->add(new admin_setting_configcheckbox('local_treestudyplan/enablecoach',
|
$page->add(new admin_setting_configcheckbox('local_treestudyplan/enablecoach',
|
||||||
|
|
68
styles.css
68
styles.css
|
@ -318,17 +318,25 @@ body.path-local-treestudyplan .editmode-switch-form > * {
|
||||||
.features-treestudyplan li.t-coursecat-list-item i.t-caret {
|
.features-treestudyplan li.t-coursecat-list-item i.t-caret {
|
||||||
width: 9px;
|
width: 9px;
|
||||||
}
|
}
|
||||||
.path-local-treestudyplan li.t-coursecat-list-item,
|
.path-local-treestudyplan .t-coursecat-heading,
|
||||||
|
.path-local-treestudyplan .t-course-heading,
|
||||||
|
.features-treestudyplan .t-coursecat-heading,
|
||||||
|
.features-treestudyplan .t-course-heading {
|
||||||
|
min-width: 180px;
|
||||||
|
max-width: 240px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.path-local-treestudyplan li.t-coursecat-list-item .draggable-course,
|
||||||
.path-local-treestudyplan li.t-course-list-item .draggable-course,
|
.path-local-treestudyplan li.t-course-list-item .draggable-course,
|
||||||
.features-treestudyplan li.t-coursecat-list-item,
|
.features-treestudyplan li.t-coursecat-list-item .draggable-course,
|
||||||
.features-treestudyplan li.t-course-list-item .draggable-course {
|
.features-treestudyplan li.t-course-list-item .draggable-course {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
}
|
}
|
||||||
.path-local-treestudyplan li.t-coursecat-list-item:hover,
|
.path-local-treestudyplan li.t-coursecat-list-item .draggable-course:hover,
|
||||||
.path-local-treestudyplan li.t-course-list-item .draggable-course:hover,
|
.path-local-treestudyplan li.t-course-list-item .draggable-course:hover,
|
||||||
.features-treestudyplan li.t-coursecat-list-item:hover,
|
.features-treestudyplan li.t-coursecat-list-item .draggable-course:hover,
|
||||||
.features-treestudyplan li.t-course-list-item .draggable-course:hover {
|
.features-treestudyplan li.t-course-list-item .draggable-course:hover {
|
||||||
text-overflow: clip;
|
text-overflow: clip;
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
|
@ -421,6 +429,7 @@ body.path-local-treestudyplan .editmode-switch-form > * {
|
||||||
.path-local-treestudyplan .s-studyline-period-highlight,
|
.path-local-treestudyplan .s-studyline-period-highlight,
|
||||||
.features-treestudyplan .s-studyline-period-highlight {
|
.features-treestudyplan .s-studyline-period-highlight {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
pointer-events: none;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 50000px;
|
height: 50000px;
|
||||||
opacity: var(--highlight-mix);
|
opacity: var(--highlight-mix);
|
||||||
|
@ -493,6 +502,11 @@ body.path-local-treestudyplan .editmode-switch-form > * {
|
||||||
align-content: center;
|
align-content: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
.path-local-treestudyplan .t-slot-drop.hiviz.drop-allowed,
|
||||||
|
.features-treestudyplan .t-slot-drop.hiviz.drop-allowed {
|
||||||
|
min-height: 44px;
|
||||||
|
background-color: yellow;
|
||||||
|
}
|
||||||
.path-local-treestudyplan .t-slot-drop.competency,
|
.path-local-treestudyplan .t-slot-drop.competency,
|
||||||
.features-treestudyplan .t-slot-drop.competency {
|
.features-treestudyplan .t-slot-drop.competency {
|
||||||
min-width: 100px;
|
min-width: 100px;
|
||||||
|
@ -509,6 +523,11 @@ body.path-local-treestudyplan .editmode-switch-form > * {
|
||||||
.features-treestudyplan .t-slot-drop.secondary.drop-allowed {
|
.features-treestudyplan .t-slot-drop.secondary.drop-allowed {
|
||||||
min-height: 5px;
|
min-height: 5px;
|
||||||
}
|
}
|
||||||
|
.path-local-treestudyplan .t-slot-drop.secondary.drop-allowed.hiviz,
|
||||||
|
.features-treestudyplan .t-slot-drop.secondary.drop-allowed.hiviz {
|
||||||
|
min-height: 44px;
|
||||||
|
background-color: yellow;
|
||||||
|
}
|
||||||
.path-local-treestudyplan .t-item-deletebox,
|
.path-local-treestudyplan .t-item-deletebox,
|
||||||
.features-treestudyplan .t-item-deletebox {
|
.features-treestudyplan .t-item-deletebox {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
@ -1818,3 +1837,44 @@ body.path-local-treestudyplan .editmode-switch-form > * {
|
||||||
.features-treestudyplan .collapse.show {
|
.features-treestudyplan .collapse.show {
|
||||||
height: auto;
|
height: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#p-sidebar-wrapper {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: flex-start;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
#p-sidebar-wrapper #p-sidebar-contentwrapper {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
#p-sidebar-wrapper .p-sidebar {
|
||||||
|
position: relative;
|
||||||
|
top: 0;
|
||||||
|
min-width: 320px;
|
||||||
|
width: auto;
|
||||||
|
max-width: 430px;
|
||||||
|
height: 100vh;
|
||||||
|
max-height: 100%;
|
||||||
|
margin: 0;
|
||||||
|
outline: 0;
|
||||||
|
-webkit-transform: translateX(0);
|
||||||
|
transform: translateX(0);
|
||||||
|
background-color: var(--light);
|
||||||
|
display: block;
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
z-index: 100;
|
||||||
|
--p-sidebar-hideoffset: -320px;
|
||||||
|
}
|
||||||
|
#p-sidebar-wrapper .p-sidebar.p-sidebar-shadow {
|
||||||
|
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
#p-sidebar-wrapper .p-sidebar.shown {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
#p-sidebar-wrapper .p-sidebar:not(.p-sidebar-right).hidden {
|
||||||
|
margin-left: var(--p-sidebar-hideoffset);
|
||||||
|
}
|
||||||
|
#p-sidebar-wrapper .p-sidebar.p-sidebar-right.hidden {
|
||||||
|
margin-right: var(--p-sidebar-hideoffset);
|
||||||
|
}
|
|
@ -22,7 +22,7 @@
|
||||||
defined('MOODLE_INTERNAL') || die();
|
defined('MOODLE_INTERNAL') || die();
|
||||||
|
|
||||||
$plugin->component = 'local_treestudyplan'; // Recommended since 2.0.2 (MDL-26035). Required since 3.0 (MDL-48494).
|
$plugin->component = 'local_treestudyplan'; // Recommended since 2.0.2 (MDL-26035). Required since 3.0 (MDL-48494).
|
||||||
$plugin->version = 2024041901; // YYYYMMDDHH (year, month, day, iteration).
|
$plugin->version = 2024041904; // YYYYMMDDHH (year, month, day, iteration).
|
||||||
$plugin->requires = 2021051700; // YYYYMMDDHH (This is the release version for Moodle 3.11).
|
$plugin->requires = 2021051700; // YYYYMMDDHH (This is the release version for Moodle 3.11).
|
||||||
|
|
||||||
$plugin->release = "1.1.6";
|
$plugin->release = "1.1.6";
|
||||||
|
|
Loading…
Reference in New Issue
Block a user