{"version":3,"file":"treestudyplan-components.min.js","sources":["../src/treestudyplan-components.js"],"sourcesContent":["/*eslint no-var: \"error\"*/\n/*eslint no-console: \"off\"*/\n/*eslint-disable no-trailing-spaces */\n/*eslint-env es6*/\n// Put this file in path/to/plugin/amd/src\n\nimport {load_strings} from './util/string-helper';\nimport {format_date} from './util/date-helper';\n\nexport default {\n studyplanTiming(a) {\n const now = new Date().getTime();\n let timing = 'future';\n if(new Date(a.startdate).getTime() < now){\n if(a.enddate && now > new Date(a.enddate).getTime()) {\n timing = 'past';\n } else {\n timing = 'present';\n }\n }\n return timing;\n },\n\n install(Vue/*,options*/){\n let strings = load_strings({\n studyplancard: {\n open: \"open\",\n noenddate: \"noenddate\",\n idnumber: \"studyplan_idnumber\",\n description: \"studyplan_description\",\n completed: \"completed\",\n }\n });\n // Create new eventbus for interaction between item components\n const ItemEventBus = new Vue();\n\n Vue.component('s-studyplan-card', {\n props: {\n value: {\n type: Object,\n },\n open: {\n type: Boolean\n },\n },\n data() {\n return {\n text: strings.studyplancard\n };\n },\n computed: {\n timing(){\n const now = new Date().getTime();\n const startdate = new Date(this.value.pages[0].startdate).getTime();\n const enddate = new Date(this.value.pages[0].enddate).getTime();\n let timing = 'future';\n if(startdate < now){\n if(this.value.pages[0].enddate && now > enddate) {\n timing = 'past';\n } else {\n timing = 'present';\n }\n }\n return timing;\n },\n startdate(){\n return format_date(this.value.pages[0].startdate);\n },\n enddate(){\n if(this.value.pages[0].enddate){\n return format_date(this.value.pages[0].enddate);\n }\n else {\n return this.text.noenddate;\n }\n },\n width_completed() {\n if(this.value.progress) {\n return this.value.progress * 100;\n } else {\n return 0;\n }\n },\n width_incomplete() {\n if(this.value.progress) {\n return (1-this.value.progress) * 100;\n } else {\n return 100;\n }\n },\n percentage_complete() {\n if(this.value.progress) {\n return Math.round(this.value.progress * 100) + \"%\";\n } else {\n return \"0%\";\n }\n }\n },\n methods: {\n onOpenClick(e) {\n this.$emit('open',e);\n }\n },\n template: `\n \n \n \n
\n
\n
\n
\n \n {{value.name}}\n \n \n
\n
\n
\n {{ text.idnumber }}: {{ value.idnumber }}\n
\n
\n
0\"\n :style=\"{width: width_completed+'%'}\"\n class='s-studyplan-card-progress-segment s-studyplan-card-progress-completed'\n >
\n
\n {{ percentage_complete}} {{ text.completed.toLowerCase() }} \n
\n
\n
\n \n
\n \n \n \n `,\n });\n\n /*\n * S-STUDYLINE-HEADER-HEADING\n * The only reasing this is not a simple empty div, is the fact that the header height\n * needs to match that of the period headers\n */\n Vue.component('s-studyline-header-heading', {\n props: {\n identifier: {\n type: Number, // Page reference.\n default() { return 0;}\n }\n },\n data() {\n return {\n layerHeights: {}\n };\n },\n created() {\n // Listener for the signal that a new connection was made and needs to be drawn\n // Sent by the incoming item - By convention, outgoing items are responsible for drawing the lines\n ItemEventBus.$on('headerHeightChange', this.onHeaderHeightChange);\n },\n computed: {\n\n },\n methods: {\n onHeaderHeightChange(newheight,identifier){\n if (this.identifier == identifier) {\n if(this.$refs.main){\n this.$refs.main.style.height = `${newheight}px`;\n }\n }\n }\n },\n template: `\n
\n `,\n });\n\n Vue.component('s-studyline-header-period', {\n props: {\n value: {\n type: Object, // dict with layer as index\n },\n identifier: {\n type: Number, // Page reference.\n default() { return 0;}\n }\n },\n mounted() {\n const self=this;\n if(self.value.period == 1){\n self.resizeListener = new ResizeObserver(() => {\n if(self.$refs.main){\n const size = self.$refs.main.getBoundingClientRect();\n ItemEventBus.$emit('headerHeightChange', size.height, self.identifier);\n }\n }).observe(self.$refs.main);\n }\n },\n unmounted() {\n if(this.resizeListener) {\n this.resizeListener.disconnect();\n }\n },\n computed: {\n startdate(){\n return format_date(this.value.startdate);\n },\n enddate(){\n return format_date(this.value.enddate);\n },\n current(){\n if( this.value && this.value.startdate && this.value.enddate){\n const now = new Date();\n const pstart = new Date(this.value.startdate);\n const pend = new Date(this.value.enddate);\n return (now >= pstart && now < pend);\n }\n else {\n return false;\n }\n }\n\n },\n data() {\n return {\n };\n },\n template: `\n

{{ value.shortname }}\n {{ value.fullname }}
\n \n {{ startdate }} - {{ enddate }}\n \n \n

\n {{ startdate }} - {{ enddate }}\n

\n
\n `,\n });\n\n\n }\n};"],"names":["studyplanTiming","a","now","Date","getTime","timing","startdate","enddate","install","Vue","strings","studyplancard","open","noenddate","idnumber","description","completed","ItemEventBus","component","props","value","type","Object","Boolean","data","text","computed","this","pages","width_completed","progress","width_incomplete","percentage_complete","Math","round","methods","onOpenClick","e","$emit","template","identifier","Number","default","layerHeights","created","$on","onHeaderHeightChange","newheight","$refs","main","style","height","mounted","self","period","resizeListener","ResizeObserver","size","getBoundingClientRect","observe","unmounted","disconnect","current","pstart","pend"],"mappings":"yPASe,CACXA,gBAAgBC,SACNC,KAAM,IAAIC,MAAOC,cACnBC,OAAS,gBACV,IAAIF,KAAKF,EAAEK,WAAWF,UAAYF,MAE7BG,OADDJ,EAAEM,SAAWL,IAAM,IAAIC,KAAKF,EAAEM,SAASH,UAC7B,OAEA,WAGVC,QAGXG,QAAQC,SACAC,SAAU,8BAAa,CACvBC,cAAe,CACXC,KAAM,OACNC,UAAW,YACXC,SAAU,qBACVC,YAAa,wBACbC,UAAW,qBAIbC,aAAe,IAAIR,IAEzBA,IAAIS,UAAU,mBAAoB,CAC9BC,MAAO,CACHC,MAAO,CACHC,KAAMC,QAEVV,KAAM,CACFS,KAAME,UAGdC,KAAI,KACO,CACHC,KAAMf,QAAQC,gBAGtBe,SAAU,CACNrB,eACUH,KAAM,IAAIC,MAAOC,UACjBE,UAAY,IAAIH,KAAKwB,KAAKP,MAAMQ,MAAM,GAAGtB,WAAWF,UACpDG,QAAU,IAAIJ,KAAKwB,KAAKP,MAAMQ,MAAM,GAAGrB,SAASH,cAClDC,OAAS,gBACVC,UAAYJ,MAEPG,OADDsB,KAAKP,MAAMQ,MAAM,GAAGrB,SAAWL,IAAMK,QAC3B,OAEA,WAGVF,QAEXC,mBACW,2BAAYqB,KAAKP,MAAMQ,MAAM,GAAGtB,YAE3CC,iBACOoB,KAAKP,MAAMQ,MAAM,GAAGrB,SACZ,2BAAYoB,KAAKP,MAAMQ,MAAM,GAAGrB,SAGhCoB,KAAKF,KAAKZ,WAGzBgB,yBACOF,KAAKP,MAAMU,SACmB,IAAtBH,KAAKP,MAAMU,SAEX,GAGfC,0BACOJ,KAAKP,MAAMU,SACuB,KAAzB,EAAEH,KAAKP,MAAMU,UAEd,KAGfE,6BACOL,KAAKP,MAAMU,SACHG,KAAKC,MAA4B,IAAtBP,KAAKP,MAAMU,UAAkB,IAExC,OAInBK,QAAS,CACLC,YAAYC,QACHC,MAAM,OAAOD,KAG1BE,SAAW,gyGAmEf9B,IAAIS,UAAU,6BAA8B,CACxCC,MAAO,CACHqB,WAAY,CACRnB,KAAMoB,OACNC,QAAO,IAAY,IAG3BlB,KAAI,KACO,CACHmB,aAAc,KAGtBC,UAGI3B,aAAa4B,IAAI,qBAAsBlB,KAAKmB,uBAEhDpB,SAAU,GAGVS,QAAS,CACLW,qBAAqBC,UAAUP,YACvBb,KAAKa,YAAcA,YAChBb,KAAKqB,MAAMC,YACLD,MAAMC,KAAKC,MAAMC,OAAU,GAAEJ,iBAKlDR,SAAW,gHAKf9B,IAAIS,UAAU,4BAA6B,CACvCC,MAAO,CACHC,MAAO,CACHC,KAAMC,QAEVkB,WAAY,CACRnB,KAAMoB,OACNC,QAAO,IAAY,IAG3BU,gBACUC,KAAK1B,KACa,GAArB0B,KAAKjC,MAAMkC,SACVD,KAAKE,eAAiB,IAAIC,gBAAe,QAClCH,KAAKL,MAAMC,KAAK,OACTQ,KAAOJ,KAAKL,MAAMC,KAAKS,wBAC7BzC,aAAaqB,MAAM,qBAAsBmB,KAAKN,OAAQE,KAAKb,gBAEhEmB,QAAQN,KAAKL,MAAMC,QAG9BW,YACOjC,KAAK4B,qBACCA,eAAeM,cAG5BnC,SAAU,CACNpB,mBACW,2BAAYqB,KAAKP,MAAMd,YAElCC,iBACW,2BAAYoB,KAAKP,MAAMb,UAElCuD,aACQnC,KAAKP,OAASO,KAAKP,MAAMd,WAAaqB,KAAKP,MAAMb,QAAQ,OACnDL,IAAM,IAAIC,KACV4D,OAAS,IAAI5D,KAAKwB,KAAKP,MAAMd,WAC7B0D,KAAO,IAAI7D,KAAKwB,KAAKP,MAAMb,gBACzBL,KAAO6D,QAAU7D,IAAM8D,YAGxB,IAKnBxC,KAAI,KACO,IAGXe,SAAW"}