123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390 |
- /*
- * 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
- })
- });
- 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';
- 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))
- });
- 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;
- }
- 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))
- });
- group.add(weekText);
- }
- };
- CalendarView.type = 'calendar';
- return CalendarView;
- }(ComponentView);
- export default CalendarView;
|