diff --git a/src/component/axis/AxisBuilder.js b/src/component/axis/AxisBuilder.js index 1f0ff7ec85c4aa0c3aeb76313f77a941740b5885..919fb5e5db176850a4fab911ffb095c74dfffa69 100644 --- a/src/component/axis/AxisBuilder.js +++ b/src/component/axis/AxisBuilder.js @@ -25,6 +25,7 @@ import {isRadianAroundZero, remRadian} from '../../util/number'; import {createSymbol} from '../../util/symbol'; import * as matrixUtil from 'zrender/src/core/matrix'; import {applyTransform as v2ApplyTransform} from 'zrender/src/core/vector'; +import {shouldShowAllLabels} from '../../coord/axisHelper'; var PI = Math.PI; @@ -479,6 +480,10 @@ function isSilent(axisModel) { } function fixMinMaxLabelShow(axisModel, labelEls, tickEls) { + if (shouldShowAllLabels(axisModel.axis)) { + return; + } + // If min or max are user set, we need to check // If the tick on min(max) are overlap on their neighbour tick // If they are overlapped, we need to hide the min(max) tick label diff --git a/src/coord/axisHelper.js b/src/coord/axisHelper.js index 34762bf0059ca598c2211a42b34afe7074548617..a0e2a136081b57dcc97721203bd99512ad8fbaf8 100644 --- a/src/coord/axisHelper.js +++ b/src/coord/axisHelper.js @@ -387,4 +387,23 @@ function rotateTextRect(textRect, rotate) { return rotatedRect; } +/** + * @param {module:echarts/src/model/Model} model axisLabelModel or axisTickModel + * @return {number|String} Can be null|'auto'|number|function + */ +export function getOptionCategoryInterval(model) { + var interval = model.get('interval'); + return interval == null ? 'auto' : interval; +} + +/** + * Set `categoryInterval` as 0 implicitly indicates that + * show all labels reguardless of overlap. + * @param {Object} axis axisModel.axis + * @return {boolean} + */ +export function shouldShowAllLabels(axis) { + return axis.type === 'category' + && getOptionCategoryInterval(axis.getLabelModel()) === 0; +} diff --git a/src/coord/axisTickLabelBuilder.js b/src/coord/axisTickLabelBuilder.js index 822cd9db92bc8e08b33e0dc77f01379ba8bd5ad7..2809d10f910e872e803be566f8c976c8af226ae2 100644 --- a/src/coord/axisTickLabelBuilder.js +++ b/src/coord/axisTickLabelBuilder.js @@ -20,7 +20,11 @@ import * as zrUtil from 'zrender/src/core/util'; import * as textContain from 'zrender/src/contain/text'; import {makeInner} from '../util/model'; -import {makeLabelFormatter} from './axisHelper'; +import { + makeLabelFormatter, + getOptionCategoryInterval, + shouldShowAllLabels +} from './axisHelper'; var inner = makeInner(); @@ -304,12 +308,11 @@ function makeLabelsByNumericCategoryInterval(axis, categoryInterval, onlyTick) { // suitable for splitLine and splitArea rendering. // (2) Scales except category always contain min max label so // do not need to perform this process. - var showMinMax = { - min: labelModel.get('showMinLabel'), - max: labelModel.get('showMaxLabel') - }; + var showAllLabel = shouldShowAllLabels(axis); + var includeMinLabel = labelModel.get('showMinLabel') || showAllLabel; + var includeMaxLabel = labelModel.get('showMaxLabel') || showAllLabel; - if (showMinMax.min && startTick !== ordinalExtent[0]) { + if (includeMinLabel && startTick !== ordinalExtent[0]) { addItem(ordinalExtent[0]); } @@ -319,7 +322,7 @@ function makeLabelsByNumericCategoryInterval(axis, categoryInterval, onlyTick) { addItem(tickValue); } - if (showMinMax.max && tickValue !== ordinalExtent[1]) { + if (includeMaxLabel && tickValue !== ordinalExtent[1]) { addItem(ordinalExtent[1]); } @@ -360,9 +363,3 @@ function makeLabelsByCustomizedCategoryInterval(axis, categoryInterval, onlyTick return result; } - -// Can be null|'auto'|number|function -function getOptionCategoryInterval(model) { - var interval = model.get('interval'); - return interval == null ? 'auto' : interval; -} diff --git a/test/axis-lastLabel.html b/test/axis-lastLabel.html index aa51add9ed4ff8d83e224777054f9a6e6c261ea9..5d7d1bd5f32d43e2601cead60a72e2b5cd9a4b55 100644 --- a/test/axis-lastLabel.html +++ b/test/axis-lastLabel.html @@ -47,6 +47,7 @@ under the License.
+
@@ -357,5 +358,107 @@ under the License. + + + + + + + + + + + + \ No newline at end of file diff --git a/test/axisLabel.html b/test/axisLabel.html index 5ef2f4a30960814d17f89c8cf6c0e8c15e122e32..67a7352eb9fedfd24340d5ed46b8cdff461fb327 100644 --- a/test/axisLabel.html +++ b/test/axisLabel.html @@ -26,6 +26,8 @@ under the License. + + @@ -41,6 +43,7 @@ under the License.
+
@@ -257,7 +260,11 @@ under the License. require([ 'echarts' ], function (echarts) { - var chart = echarts.init(document.getElementById('main3')); + var el = document.getElementById('main3'); + if (!el) { + return; + } + var chart = echarts.init(el); var rotate = 30; option = { @@ -302,5 +309,75 @@ under the License. + + + + + + + + + + + \ No newline at end of file diff --git a/test/lib/reset.css b/test/lib/reset.css index d513015b5f069f049fa8e09ce0980d2660613457..671605ba48032da5375cfc04801521a236db0ee0 100644 --- a/test/lib/reset.css +++ b/test/lib/reset.css @@ -107,3 +107,19 @@ td.test-data-table-key { font-size: 12px; color: rgb(69, 162, 238) } + +.record-canvas .content-area { + display: none; + position: absolute; + background: #fff; + left: 10px; + top: 20px; + border: 2px solid #000; + padding: 10px; + z-index: 9999; + box-shadow: 0 0 3px #000; +} +.record-canvas textarea { + width: 300px; + height: 500px; +} diff --git a/test/lib/testHelper.js b/test/lib/testHelper.js index 7140dde2ac7a676e0cc9477c206bb979b2f16082..ebd2d00c14c1fbf93377a7b61b13c301bb18010b 100644 --- a/test/lib/testHelper.js +++ b/test/lib/testHelper.js @@ -55,6 +55,7 @@ * @param {boolean} [opt.notMerge] * @param {Array.|Object} [opt.button] {text: ..., onClick: ...}, or an array of them. * @param {Array.|Object} [opt.buttons] {text: ..., onClick: ...}, or an array of them. + * @param {boolean} [opt.recordCanvas] 'ut/lib/canteen.js' is required. */ testHelper.create = function (echarts, domOrId, opt) { var dom = getDom(domOrId); @@ -69,6 +70,7 @@ var buttonsContainer = document.createElement('div'); var dataTableContainer = document.createElement('div'); var infoContainer = document.createElement('div'); + var recordCanvasContainer = document.createElement('div'); title.setAttribute('title', dom.getAttribute('id')); @@ -79,12 +81,14 @@ buttonsContainer.className = 'test-buttons'; dataTableContainer.className = 'test-data-table'; infoContainer.className = 'test-info'; + recordCanvasContainer.className = 'record-canvas'; if (opt.info) { dom.className += ' test-chart-block-has-right'; infoContainer.className += ' test-chart-block-right'; } + left.appendChild(recordCanvasContainer); left.appendChild(buttonsContainer); left.appendChild(dataTableContainer); left.appendChild(chartContainer); @@ -142,11 +146,70 @@ infoContainer.innerHTML = createObjectHTML(opt.info, opt.infoKey || 'option'); } + if (opt.recordCanvas) { + recordCanvasContainer.innerHTML = '' + + '' + + '' + + '

'; + var buttons = recordCanvasContainer.getElementsByTagName('button'); + var canvasRecordButton = buttons[0]; + var clearButton = buttons[1]; + var closeButton = buttons[2]; + var recordArea = recordCanvasContainer.getElementsByTagName('textarea')[0]; + var contentAraa = recordArea.parentNode; + canvasRecordButton.addEventListener('click', function () { + var content = []; + eachCtx(function (zlevel, ctx) { + content.push('Layer zlevel: ' + zlevel, '\n\n'); + if (typeof ctx.stack !== 'function') { + alert('Missing: '); + return; + } + var stack = ctx.stack(); + for (var i = 0; i < stack.length; i++) { + var line = stack[i]; + content.push(JSON.stringify(line), '\n'); + } + }); + contentAraa.style.display = 'block'; + recordArea.value = content.join(''); + }); + clearButton.addEventListener('click', function () { + eachCtx(function (zlevel, ctx) { + ctx.clear(); + }); + recordArea.value = 'Cleared.'; + }); + closeButton.addEventListener('click', function () { + contentAraa.style.display = 'none'; + }); + } + + function eachCtx(cb) { + var layers = chart.getZr().painter.getLayers(); + for (var zlevel in layers) { + if (layers.hasOwnProperty(zlevel)) { + var layer = layers[zlevel]; + var canvas = layer.dom; + var ctx = canvas.getContext('2d'); + cb(zlevel, ctx); + } + } + } + return chart; }; /** - * opt: {boolean}: lazyUpdate, {boolean}: notMerge, {number}: height, {Object}: {width, height, draggable} + * @param {ECharts} echarts + * @param {HTMLElement|string} domOrId + * @param {Object} option + * @param {boolean|number} opt If number, means height + * @param {boolean} opt.lazyUpdate + * @param {boolean} opt.notMerge + * @param {number} opt.width + * @param {number} opt.height + * @param {boolean} opt.draggable */ testHelper.createChart = function (echarts, domOrId, option, opt) { if (typeof opt === 'number') { diff --git a/test/richText-fontsize.html b/test/richText-fontsize.html new file mode 100644 index 0000000000000000000000000000000000000000..bc32ae7b8c89255a54adaac5739db412b82b4caf --- /dev/null +++ b/test/richText-fontsize.html @@ -0,0 +1,182 @@ + + + + + + + + + + + + + +
+ + + \ No newline at end of file