WebWrappers/Apps/EchartsPharo/EcCalendar.class.st
2022-09-02 00:00:10 +00:00

121 lines
3.2 KiB
Smalltalk

Class {
#name : #EcCalendar,
#superclass : #Object,
#instVars : [
'events'
],
#category : #EchartsPharo
}
{ #category : #accessing }
EcCalendar >> asEcScript [
^ 'var myCalendar = echarts.init(document.getElementById(',($' asString), 'calendar', ($' asString), '));', Character cr asString,
'var option = {
tooltip: {},
animation: true,
animationDuration: 500,
legend: {
data:', self eventsLabel, ',',
'left:', ($' asString ), '0',($' asString),
'},
calendar: {
top:', ($' asString), 'middle', ($' asString), ',',
'left:', ($' asString),'0', ($' asString), ',',
'orient:', ($' asString), 'horizontal', ($' asString), ',',
'cellSize: 40,
yearLabel: {
margin: 50,
fontSize: 30,
color:', ($' asString), '#999', ($' asString),
'},
dayLabel: {
firstDay: 1,
nameMap:', ($' asString), 'cn', ($' asString),
'},
monthLabel: {
nameMap:', ($' asString),'cn', ($' asString), ',',
'margin: 15,
fontSize: 20,
color:', ($' asString), '#999', ($' asString),
'},
range:', self datesRangeWithMarginString,
'},
series: [', Character cr asString,
self eventsAsStringSnippets,
']
};
myCalendar.setOption(option);'
]
{ #category : #accessing }
EcCalendar >> asHTMLElement [
^ '<div id="calendar" style="width:90vw;height:400px;"></div>', Character cr asString,
'<script type="text/javascript">', Character cr asString,
self asEcScript, Character cr asString,
'</script>'
]
{ #category : #accessing }
EcCalendar >> datesRange [
| tempEventsDates |
tempEventsDates := self events collect: [ :each | each dates ].
tempEventsDates := tempEventsDates flattened collect: [ :each | each asDate ].
^ {tempEventsDates asSortedCollection first .
tempEventsDates asSortedCollection last }.
]
{ #category : #accessing }
EcCalendar >> datesRangeString [
| datesRangeTemp |
datesRangeTemp := self datesRange collect: [ :date | ($' asString), date yyyymmdd, ($' asString) ].
^ '[', (',' join: datesRangeTemp), ']'
]
{ #category : #accessing }
EcCalendar >> datesRangeWithMargin [
| tempEventsDates |
tempEventsDates := self events collect: [ :each | each dates ].
tempEventsDates := tempEventsDates flattened collect: [ :each | each asDate ].
^ {(tempEventsDates asSortedCollection first asDateAndTime - 10 days) asDate .
(tempEventsDates asSortedCollection last) addDays: 10 }.
]
{ #category : #accessing }
EcCalendar >> datesRangeWithMarginString [
| datesRangeTemp |
datesRangeTemp := self datesRangeWithMargin collect: [ :date | ($' asString), date yyyymmdd, ($' asString) ].
^ '[', (',' join: datesRangeTemp), ']'
]
{ #category : #accessing }
EcCalendar >> events [
^ events ifNil: [ events := OrderedCollection new ].
]
{ #category : #accessing }
EcCalendar >> eventsAsStringSnippets [
| tempEvents |
tempEvents := self events.
tempEvents ifNil: [ ^ self ].
^ Character cr join: (tempEvents collect: [ :each | each asStringSnippet ])
]
{ #category : #accessing }
EcCalendar >> eventsLabel [
| tempEvents |
tempEvents := self events collect: [ :each | each name ].
tempEvents := tempEvents collect: [ :each | ($' asString), each, ($' asString) ].
^ '[', (',' join: tempEvents), ']'
]