|   | 
| /* | 
| * Licensed to the Apache Software Foundation (ASF) under one | 
| * or more contributor license agreements.  See the NOTICE file | 
| * distributed with this work for additional information | 
| * regarding copyright ownership.  The ASF licenses this file | 
| * to you under the Apache License, Version 2.0 (the | 
| * "License"); you may not use this file except in compliance | 
| * with the License.  You may obtain a copy of the License at | 
| * | 
| *   http://www.apache.org/licenses/LICENSE-2.0 | 
| * | 
| * Unless required by applicable law or agreed to in writing, | 
| * software distributed under the License is distributed on an | 
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
| * KIND, either express or implied.  See the License for the | 
| * specific language governing permissions and limitations | 
| * under the License. | 
| */ | 
|   | 
|   | 
| /** | 
|  * AUTO-GENERATED FILE. DO NOT MODIFY. | 
|  */ | 
|   | 
| /* | 
| * Licensed to the Apache Software Foundation (ASF) under one | 
| * or more contributor license agreements.  See the NOTICE file | 
| * distributed with this work for additional information | 
| * regarding copyright ownership.  The ASF licenses this file | 
| * to you under the Apache License, Version 2.0 (the | 
| * "License"); you may not use this file except in compliance | 
| * with the License.  You may obtain a copy of the License at | 
| * | 
| *   http://www.apache.org/licenses/LICENSE-2.0 | 
| * | 
| * Unless required by applicable law or agreed to in writing, | 
| * software distributed under the License is distributed on an | 
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
| * KIND, either express or implied.  See the License for the | 
| * specific language governing permissions and limitations | 
| * under the License. | 
| */ | 
| import { __extends } from "tslib"; | 
| import { isString, extend, map, isFunction } from 'zrender/lib/core/util.js'; | 
| import * as graphic from '../../util/graphic.js'; | 
| import { createTextStyle } from '../../label/labelStyle.js'; | 
| import { formatTplSimple } from '../../util/format.js'; | 
| import { parsePercent } from '../../util/number.js'; | 
| import ComponentView from '../../view/Component.js'; | 
| import { getLocaleModel } from '../../core/locale.js'; | 
| var CalendarView = /** @class */function (_super) { | 
|   __extends(CalendarView, _super); | 
|   function CalendarView() { | 
|     var _this = _super !== null && _super.apply(this, arguments) || this; | 
|     _this.type = CalendarView.type; | 
|     return _this; | 
|   } | 
|   CalendarView.prototype.render = function (calendarModel, ecModel, api) { | 
|     var group = this.group; | 
|     group.removeAll(); | 
|     var coordSys = calendarModel.coordinateSystem; | 
|     // range info | 
|     var rangeData = coordSys.getRangeInfo(); | 
|     var orient = coordSys.getOrient(); | 
|     // locale | 
|     var localeModel = ecModel.getLocaleModel(); | 
|     this._renderDayRect(calendarModel, rangeData, group); | 
|     // _renderLines must be called prior to following function | 
|     this._renderLines(calendarModel, rangeData, orient, group); | 
|     this._renderYearText(calendarModel, rangeData, orient, group); | 
|     this._renderMonthText(calendarModel, localeModel, orient, group); | 
|     this._renderWeekText(calendarModel, localeModel, rangeData, orient, group); | 
|   }; | 
|   // render day rect | 
|   CalendarView.prototype._renderDayRect = function (calendarModel, rangeData, group) { | 
|     var coordSys = calendarModel.coordinateSystem; | 
|     var itemRectStyleModel = calendarModel.getModel('itemStyle').getItemStyle(); | 
|     var sw = coordSys.getCellWidth(); | 
|     var sh = coordSys.getCellHeight(); | 
|     for (var i = rangeData.start.time; i <= rangeData.end.time; i = coordSys.getNextNDay(i, 1).time) { | 
|       var point = coordSys.dataToRect([i], false).tl; | 
|       // every rect | 
|       var rect = new graphic.Rect({ | 
|         shape: { | 
|           x: point[0], | 
|           y: point[1], | 
|           width: sw, | 
|           height: sh | 
|         }, | 
|         cursor: 'default', | 
|         style: itemRectStyleModel | 
|       }); | 
|       group.add(rect); | 
|     } | 
|   }; | 
|   // render separate line | 
|   CalendarView.prototype._renderLines = function (calendarModel, rangeData, orient, group) { | 
|     var self = this; | 
|     var coordSys = calendarModel.coordinateSystem; | 
|     var lineStyleModel = calendarModel.getModel(['splitLine', 'lineStyle']).getLineStyle(); | 
|     var show = calendarModel.get(['splitLine', 'show']); | 
|     var lineWidth = lineStyleModel.lineWidth; | 
|     this._tlpoints = []; | 
|     this._blpoints = []; | 
|     this._firstDayOfMonth = []; | 
|     this._firstDayPoints = []; | 
|     var firstDay = rangeData.start; | 
|     for (var i = 0; firstDay.time <= rangeData.end.time; i++) { | 
|       addPoints(firstDay.formatedDate); | 
|       if (i === 0) { | 
|         firstDay = coordSys.getDateInfo(rangeData.start.y + '-' + rangeData.start.m); | 
|       } | 
|       var date = firstDay.date; | 
|       date.setMonth(date.getMonth() + 1); | 
|       firstDay = coordSys.getDateInfo(date); | 
|     } | 
|     addPoints(coordSys.getNextNDay(rangeData.end.time, 1).formatedDate); | 
|     function addPoints(date) { | 
|       self._firstDayOfMonth.push(coordSys.getDateInfo(date)); | 
|       self._firstDayPoints.push(coordSys.dataToRect([date], false).tl); | 
|       var points = self._getLinePointsOfOneWeek(calendarModel, date, orient); | 
|       self._tlpoints.push(points[0]); | 
|       self._blpoints.push(points[points.length - 1]); | 
|       show && self._drawSplitline(points, lineStyleModel, group); | 
|     } | 
|     // render top/left line | 
|     show && this._drawSplitline(self._getEdgesPoints(self._tlpoints, lineWidth, orient), lineStyleModel, group); | 
|     // render bottom/right line | 
|     show && this._drawSplitline(self._getEdgesPoints(self._blpoints, lineWidth, orient), lineStyleModel, group); | 
|   }; | 
|   // get points at both ends | 
|   CalendarView.prototype._getEdgesPoints = function (points, lineWidth, orient) { | 
|     var rs = [points[0].slice(), points[points.length - 1].slice()]; | 
|     var idx = orient === 'horizontal' ? 0 : 1; | 
|     // both ends of the line are extend half lineWidth | 
|     rs[0][idx] = rs[0][idx] - lineWidth / 2; | 
|     rs[1][idx] = rs[1][idx] + lineWidth / 2; | 
|     return rs; | 
|   }; | 
|   // render split line | 
|   CalendarView.prototype._drawSplitline = function (points, lineStyle, group) { | 
|     var poyline = new graphic.Polyline({ | 
|       z2: 20, | 
|       shape: { | 
|         points: points | 
|       }, | 
|       style: lineStyle | 
|     }); | 
|     group.add(poyline); | 
|   }; | 
|   // render month line of one week points | 
|   CalendarView.prototype._getLinePointsOfOneWeek = function (calendarModel, date, orient) { | 
|     var coordSys = calendarModel.coordinateSystem; | 
|     var parsedDate = coordSys.getDateInfo(date); | 
|     var points = []; | 
|     for (var i = 0; i < 7; i++) { | 
|       var tmpD = coordSys.getNextNDay(parsedDate.time, i); | 
|       var point = coordSys.dataToRect([tmpD.time], false); | 
|       points[2 * tmpD.day] = point.tl; | 
|       points[2 * tmpD.day + 1] = point[orient === 'horizontal' ? 'bl' : 'tr']; | 
|     } | 
|     return points; | 
|   }; | 
|   CalendarView.prototype._formatterLabel = function (formatter, params) { | 
|     if (isString(formatter) && formatter) { | 
|       return formatTplSimple(formatter, params); | 
|     } | 
|     if (isFunction(formatter)) { | 
|       return formatter(params); | 
|     } | 
|     return params.nameMap; | 
|   }; | 
|   CalendarView.prototype._yearTextPositionControl = function (textEl, point, orient, position, margin) { | 
|     var x = point[0]; | 
|     var y = point[1]; | 
|     var aligns = ['center', 'bottom']; | 
|     if (position === 'bottom') { | 
|       y += margin; | 
|       aligns = ['center', 'top']; | 
|     } else if (position === 'left') { | 
|       x -= margin; | 
|     } else if (position === 'right') { | 
|       x += margin; | 
|       aligns = ['center', 'top']; | 
|     } else { | 
|       // top | 
|       y -= margin; | 
|     } | 
|     var rotate = 0; | 
|     if (position === 'left' || position === 'right') { | 
|       rotate = Math.PI / 2; | 
|     } | 
|     return { | 
|       rotation: rotate, | 
|       x: x, | 
|       y: y, | 
|       style: { | 
|         align: aligns[0], | 
|         verticalAlign: aligns[1] | 
|       } | 
|     }; | 
|   }; | 
|   // render year | 
|   CalendarView.prototype._renderYearText = function (calendarModel, rangeData, orient, group) { | 
|     var yearLabel = calendarModel.getModel('yearLabel'); | 
|     if (!yearLabel.get('show')) { | 
|       return; | 
|     } | 
|     var margin = yearLabel.get('margin'); | 
|     var pos = yearLabel.get('position'); | 
|     if (!pos) { | 
|       pos = orient !== 'horizontal' ? 'top' : 'left'; | 
|     } | 
|     var points = [this._tlpoints[this._tlpoints.length - 1], this._blpoints[0]]; | 
|     var xc = (points[0][0] + points[1][0]) / 2; | 
|     var yc = (points[0][1] + points[1][1]) / 2; | 
|     var idx = orient === 'horizontal' ? 0 : 1; | 
|     var posPoints = { | 
|       top: [xc, points[idx][1]], | 
|       bottom: [xc, points[1 - idx][1]], | 
|       left: [points[1 - idx][0], yc], | 
|       right: [points[idx][0], yc] | 
|     }; | 
|     var name = rangeData.start.y; | 
|     if (+rangeData.end.y > +rangeData.start.y) { | 
|       name = name + '-' + rangeData.end.y; | 
|     } | 
|     var formatter = yearLabel.get('formatter'); | 
|     var params = { | 
|       start: rangeData.start.y, | 
|       end: rangeData.end.y, | 
|       nameMap: name | 
|     }; | 
|     var content = this._formatterLabel(formatter, params); | 
|     var yearText = new graphic.Text({ | 
|       z2: 30, | 
|       style: createTextStyle(yearLabel, { | 
|         text: content | 
|       }), | 
|       silent: yearLabel.get('silent') | 
|     }); | 
|     yearText.attr(this._yearTextPositionControl(yearText, posPoints[pos], orient, pos, margin)); | 
|     group.add(yearText); | 
|   }; | 
|   CalendarView.prototype._monthTextPositionControl = function (point, isCenter, orient, position, margin) { | 
|     var align = 'left'; | 
|     var vAlign = 'top'; | 
|     var x = point[0]; | 
|     var y = point[1]; | 
|     if (orient === 'horizontal') { | 
|       y = y + margin; | 
|       if (isCenter) { | 
|         align = 'center'; | 
|       } | 
|       if (position === 'start') { | 
|         vAlign = 'bottom'; | 
|       } | 
|     } else { | 
|       x = x + margin; | 
|       if (isCenter) { | 
|         vAlign = 'middle'; | 
|       } | 
|       if (position === 'start') { | 
|         align = 'right'; | 
|       } | 
|     } | 
|     return { | 
|       x: x, | 
|       y: y, | 
|       align: align, | 
|       verticalAlign: vAlign | 
|     }; | 
|   }; | 
|   // render month and year text | 
|   CalendarView.prototype._renderMonthText = function (calendarModel, localeModel, orient, group) { | 
|     var monthLabel = calendarModel.getModel('monthLabel'); | 
|     if (!monthLabel.get('show')) { | 
|       return; | 
|     } | 
|     var nameMap = monthLabel.get('nameMap'); | 
|     var margin = monthLabel.get('margin'); | 
|     var pos = monthLabel.get('position'); | 
|     var align = monthLabel.get('align'); | 
|     var termPoints = [this._tlpoints, this._blpoints]; | 
|     if (!nameMap || isString(nameMap)) { | 
|       if (nameMap) { | 
|         // case-sensitive | 
|         localeModel = getLocaleModel(nameMap) || localeModel; | 
|       } | 
|       // PENDING | 
|       // for ZH locale, original form is `一月` but current form is `1月` | 
|       nameMap = localeModel.get(['time', 'monthAbbr']) || []; | 
|     } | 
|     var idx = pos === 'start' ? 0 : 1; | 
|     var axis = orient === 'horizontal' ? 0 : 1; | 
|     margin = pos === 'start' ? -margin : margin; | 
|     var isCenter = align === 'center'; | 
|     var labelSilent = monthLabel.get('silent'); | 
|     for (var i = 0; i < termPoints[idx].length - 1; i++) { | 
|       var tmp = termPoints[idx][i].slice(); | 
|       var firstDay = this._firstDayOfMonth[i]; | 
|       if (isCenter) { | 
|         var firstDayPoints = this._firstDayPoints[i]; | 
|         tmp[axis] = (firstDayPoints[axis] + termPoints[0][i + 1][axis]) / 2; | 
|       } | 
|       var formatter = monthLabel.get('formatter'); | 
|       var name_1 = nameMap[+firstDay.m - 1]; | 
|       var params = { | 
|         yyyy: firstDay.y, | 
|         yy: (firstDay.y + '').slice(2), | 
|         MM: firstDay.m, | 
|         M: +firstDay.m, | 
|         nameMap: name_1 | 
|       }; | 
|       var content = this._formatterLabel(formatter, params); | 
|       var monthText = new graphic.Text({ | 
|         z2: 30, | 
|         style: extend(createTextStyle(monthLabel, { | 
|           text: content | 
|         }), this._monthTextPositionControl(tmp, isCenter, orient, pos, margin)), | 
|         silent: labelSilent | 
|       }); | 
|       group.add(monthText); | 
|     } | 
|   }; | 
|   CalendarView.prototype._weekTextPositionControl = function (point, orient, position, margin, cellSize) { | 
|     var align = 'center'; | 
|     var vAlign = 'middle'; | 
|     var x = point[0]; | 
|     var y = point[1]; | 
|     var isStart = position === 'start'; | 
|     if (orient === 'horizontal') { | 
|       x = x + margin + (isStart ? 1 : -1) * cellSize[0] / 2; | 
|       align = isStart ? 'right' : 'left'; | 
|     } else { | 
|       y = y + margin + (isStart ? 1 : -1) * cellSize[1] / 2; | 
|       vAlign = isStart ? 'bottom' : 'top'; | 
|     } | 
|     return { | 
|       x: x, | 
|       y: y, | 
|       align: align, | 
|       verticalAlign: vAlign | 
|     }; | 
|   }; | 
|   // render weeks | 
|   CalendarView.prototype._renderWeekText = function (calendarModel, localeModel, rangeData, orient, group) { | 
|     var dayLabel = calendarModel.getModel('dayLabel'); | 
|     if (!dayLabel.get('show')) { | 
|       return; | 
|     } | 
|     var coordSys = calendarModel.coordinateSystem; | 
|     var pos = dayLabel.get('position'); | 
|     var nameMap = dayLabel.get('nameMap'); | 
|     var margin = dayLabel.get('margin'); | 
|     var firstDayOfWeek = coordSys.getFirstDayOfWeek(); | 
|     if (!nameMap || isString(nameMap)) { | 
|       if (nameMap) { | 
|         // case-sensitive | 
|         localeModel = getLocaleModel(nameMap) || localeModel; | 
|       } | 
|       // Use the first letter of `dayOfWeekAbbr` if `dayOfWeekShort` doesn't exist in the locale file | 
|       var dayOfWeekShort = localeModel.get(['time', 'dayOfWeekShort']); | 
|       nameMap = dayOfWeekShort || map(localeModel.get(['time', 'dayOfWeekAbbr']), function (val) { | 
|         return val[0]; | 
|       }); | 
|     } | 
|     var start = coordSys.getNextNDay(rangeData.end.time, 7 - rangeData.lweek).time; | 
|     var cellSize = [coordSys.getCellWidth(), coordSys.getCellHeight()]; | 
|     margin = parsePercent(margin, Math.min(cellSize[1], cellSize[0])); | 
|     if (pos === 'start') { | 
|       start = coordSys.getNextNDay(rangeData.start.time, -(7 + rangeData.fweek)).time; | 
|       margin = -margin; | 
|     } | 
|     var labelSilent = dayLabel.get('silent'); | 
|     for (var i = 0; i < 7; i++) { | 
|       var tmpD = coordSys.getNextNDay(start, i); | 
|       var point = coordSys.dataToRect([tmpD.time], false).center; | 
|       var day = i; | 
|       day = Math.abs((i + firstDayOfWeek) % 7); | 
|       var weekText = new graphic.Text({ | 
|         z2: 30, | 
|         style: extend(createTextStyle(dayLabel, { | 
|           text: nameMap[day] | 
|         }), this._weekTextPositionControl(point, orient, pos, margin, cellSize)), | 
|         silent: labelSilent | 
|       }); | 
|       group.add(weekText); | 
|     } | 
|   }; | 
|   CalendarView.type = 'calendar'; | 
|   return CalendarView; | 
| }(ComponentView); | 
| export default CalendarView; |