/
githubmirror
/
echarts
Обзор
Документация
Войти
/
githubmirror
/
echarts
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
5.5.1
test/lib/caseFrame.js
366 строк
12 KB
Ovilia
test: add coarse-pointer in test env
14 июл 2022, 06:47
14 июл 2022, 06:47
343b13a
Код
Авторство
О чём код?
/* * 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. */ /** * Dependencies: testHelper.js, jquery, caseFrame.css */ (function () { var testHelper = window.testHelper; var encodeHTML = testHelper.encodeHTML; var CSS_BASE = '.case-frame'; var SELECTOR_CASES_LIST_CONTAINER = CSS_BASE + ' .cases-list ul'; var SELECTOR_CASES_ITEM = 'li a'; var SELECTOR_CONTENT_IFRAME = CSS_BASE + ' .page-content iframe'; var SELECTOR_RENDERER = CSS_BASE + ' .renderer-selector input'; var SELECTOR_LISTER_FILTER = CSS_BASE + ' .list-filter'; var SELECTOR_CURRENT = CSS_BASE + ' .info-panel .current'; var SELECTOR_DIST = CSS_BASE + ' .dist-selector'; var HTML = [ '<div class="cases-list">', ' <div class="info-panel">', ' <input class="current" />', ' <div class="renderer-selector">', ' <div class="render-selector-item">', ' <input type="radio" value="canvas" name="renderer" /> CANVAS ', ' </div>', ' <div class="render-selector-item">', ' <input type="radio" value="dirty-rect" name="renderer" /> CANVAS (dirty rect) ', ' </div>', ' <div class="render-selector-item">', ' <input type="radio" value="svg" name="renderer" /> SVG ', ' </div>', ' </div>', ' <div class="list-filter"></div>', ' <select class="dist-selector">', ' <option value="dist"/>echarts/dist</option>', ' <option value="webpack-req-ec"/>boilerplat/webpack-req-ec</option>', ' <option value="webpack-req-eclibec"/>boilerplat/webpack-req-eclibec</option>', ' <option value="webpackold-req-ec"/>boilerplat/webpackold-req-ec</option>', ' <option value="webpackold-req-eclibec"/>boilerplat/webpackold-req-eclibec</option>', ' </select>', ' </div>', ' <ul></ul>', '</div>', '<div class="page-content">', ' <iframe frameborder="no" border="0" marginwidth="0" marginheight="0"', ' hspace="0" vspace="0">', ' </iframe>', '</div>', ].join(''); var globalOpt; var pagePaths; var baseURL; var listFilters; /** * @public */ var caseFrame = window.caseFrame = {}; /** * @public * @param {Object} opt * @param {HTMLElement} opt.dom * @param {Array.<string>} opt.pagePaths Relative paths. * @param {string} [opt.baseURL='.'] * @param {string} [opt.disableRendererSelector] * @param {string} [opt.disableDistSelector] * @param {Array.<Object} [opt.filters] [{name: 'stream', whiteList: [...]}, ...] */ caseFrame.init = function (opt) { renderHTML(opt.dom); globalOpt = opt; pagePaths = opt.pagePaths.slice(); baseURL = opt.baseURL || '.'; listFilters = opt.filters || []; $(window).on('hashchange', updateView); updateView(); }; function renderHTML(dom) { dom.className = 'case-frame'; dom.innerHTML = HTML; } function updateRendererSelector() { var rendererSelector = $(SELECTOR_RENDERER); rendererSelector.each(function (index, el) { el.disabled = !!globalOpt.disableRendererSelector; }); rendererSelector.off('click').on('click', function (e) { if (e.target.value === 'dirty-rect') { setState('renderer', 'canvas'); setState('useDirtyRect', true); } else { setState('renderer', e.target.value); setState('useDirtyRect', false); } }); var renderer = getState('renderer'); var useDirtyRect = getState('useDirtyRect'); rendererSelector.each(function (index, el) { el.checked = el.value === 'dirty-rect' ? useDirtyRect : el.value === renderer; }); } function updateListSelectedHint() { var hint = $(SELECTOR_CURRENT); hint.off('mouseover').on('mouseover', function (e) { updatePageHint('full'); this.select(); }); hint.off('mouseout').on('mouseout', function (e) { updatePageHint('short'); }); } function updateDistSelector() { var distSelector = $(SELECTOR_DIST); distSelector[0].disabled = !!globalOpt.disableDistSelector; distSelector.off('change').on('change', function (e) { var selector = e.target; setState('dist', selector.options[selector.selectedIndex].value); }); var dist = getState('dist'); var options = distSelector[0].options; for (var i = 0; i < options.length; i++) { if (options[i].value === dist) { distSelector[0].selectedIndex = i; } } } function updateListFilter() { var html = [ '<select class="dist-selector">', '<option value="all">all</option>' ]; for (var i = 0; i < listFilters.length; i++) { var name = encodeHTML(listFilters[i].name); html.push('<option value="' + name + '">' + name + '</option>'); } html.push('</select>'); var filterContainer = $(SELECTOR_LISTER_FILTER); filterContainer[0].innerHTML = 'FILTER: ' + html.join(''); var filterSelector = filterContainer.find('select'); filterSelector.off('change').on('change', function (e) { var selector = e.target; setState('listFilterName', selector.options[selector.selectedIndex].value); }); var currentFilterName = getState('listFilterName'); var options = filterSelector[0].options; for (var i = 0; i < options.length; i++) { if (options[i].value === currentFilterName) { filterSelector[0].selectedIndex = i; } } } // prop: renderer, dist, pagePath function getState(prop) { return stateGetters[prop](getCurrentPageURL()); } var stateGetters = { // 'canvas', 'svg' renderer: function (pageURL) { var matchResult = (pageURL || '').match(/[?&]__RENDERER__=(canvas|svg)(&|$)/); return matchResult && matchResult[1] || 'canvas'; }, // true, false, 'auto' useCoarsePointer: function (pageURL) { var matchResult = (pageURL || '').match(/[?&]__USE_COARSE_POINTER__=(true|false|auto)(&|$)/); return matchResult && matchResult[1] ? matchResult[1] === 'true' ? true : matchResult[1] === 'false' ? false : 'auto' : 'auto'; }, // true, false useDirtyRect: function (pageURL) { var matchResult = (pageURL || '').match(/[?&]__USE_DIRTY_RECT__=(true|false)(&|$)/); return matchResult && matchResult[1] === 'true'; }, // 'dist', 'webpack', 'webpackold' dist: function (pageURL) { var matchResult = (pageURL || '').match(/[?&]__ECDIST__=(webpack-req-ec|webpack-req-eclibec|webpackold-req-ec|webpackold-req-eclibec)(&|$)/); return matchResult && matchResult[1] || 'dist'; }, listFilterName: function (pageURL) { var matchResult = (pageURL || '').match(/[?&]__FILTER__=([a-zA-Z0-9_-]*)(&|$)/); return matchResult && matchResult[1] || null; }, // {index, pagePath} or null pagePathInfo: getStatePagePathInfo, pagePath: function (pageURL) { return getStatePagePathInfo(pageURL).pagePath; } }; function getStatePagePathInfo(pageURL) { var matchResult = (pageURL || '').match(/^[^?&]*/); var pagePath = matchResult && matchResult[0]; var index; if (pagePath) { for (var i = 0; i < pagePaths.length; i++) { if (pagePaths[i] === pagePath) { index = i; } } } return {index: index, pagePath: pagePath}; } function setState(prop, value) { var curr = { renderer: getState('renderer'), useDirtyRect: getState('useDirtyRect'), dist: getState('dist'), pagePath: getState('pagePath'), listFilterName: getState('listFilterName') }; curr[prop] = value; var newPageURL = makePageURL(curr); location.hash = '#' + encodeURIComponent(newPageURL); } function makePageURL(curr) { return curr.pagePath + '?' + [ '__RENDERER__=' + curr.renderer, '__USE_DIRTY_RECT__=' + curr.useDirtyRect, '__ECDIST__=' + curr.dist, '__FILTER__=' + curr.listFilterName, '__CASE_FRAME__=1' ].join('&'); } function updateView() { updateRendererSelector(); updateDistSelector(); updateListSelectedHint(); updateListFilter(); updateList(); updatePage(); updatePageHint('short'); } function getCurrentPageURL() { return decodeURIComponent( (location.hash || '').replace(/^#/, '') ); } function updateList() { var html = []; var filter; var listFilterName = getState('listFilterName'); if (listFilters && listFilterName) { for (var i = 0; i < listFilters.length; i++) { if (listFilters[i].name === listFilterName) { filter = listFilters[i]; break; } } } for (var i = 0; i < pagePaths.length; i++) { var path = pagePaths[i]; var whiteList = filter && filter.whiteList; if (whiteList) { var j = 0; for (; j < whiteList.length; j++) { if (path === whiteList[j]) { break; } } if (j >= whiteList.length) { continue; } } html.push('<li><a href="' + baseURL + '/' + encodeHTML(path) + '">' + encodeHTML(path) + '</a></li>'); } var caseListContainer = $(SELECTOR_CASES_LIST_CONTAINER); caseListContainer[0].innerHTML = html.join(''); caseListContainer.off('click').on('click', SELECTOR_CASES_ITEM, function (e) { setState('pagePath', e.currentTarget.innerHTML); return false; }); } function updatePage() { var pageURL = getCurrentPageURL(); var pagePathInfo = getState('pagePathInfo'); $(SELECTOR_CASES_LIST_CONTAINER + ' li').each(function (index, el) { el.style.background = pagePathInfo.index === index ? 'rgb(170, 224, 245)' : 'none'; }); var src = pagePathInfo.pagePath ? baseURL + '/' + pageURL : 'about:blank'; var contentIframe = $(SELECTOR_CONTENT_IFRAME); contentIframe.attr('src', src); } // type: 'full' or 'short' function updatePageHint(type) { var pagePathInfo = getState('pagePathInfo'); var newValue = !pagePathInfo.pagePath ? '' : type === 'short' ? (pagePathInfo.index != null ? (pagePathInfo.index + 1) + '. ' : '') + (pagePathInfo.pagePath || '') : testHelper.dir() + '/' + pagePathInfo.pagePath; $(SELECTOR_CURRENT).val(newValue); } })();