61 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
		
			
		
	
	
			61 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
| 
								 | 
							
								import { liftColor } from '../tool/color.js';
							 | 
						||
| 
								 | 
							
								import { getClassId } from './cssClassId.js';
							 | 
						||
| 
								 | 
							
								export function createCSSEmphasis(el, attrs, scope) {
							 | 
						||
| 
								 | 
							
								    if (!el.ignore) {
							 | 
						||
| 
								 | 
							
								        if (el.isSilent()) {
							 | 
						||
| 
								 | 
							
								            var style = {
							 | 
						||
| 
								 | 
							
								                'pointer-events': 'none'
							 | 
						||
| 
								 | 
							
								            };
							 | 
						||
| 
								 | 
							
								            setClassAttribute(style, attrs, scope, true);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            var emphasisStyle = el.states.emphasis && el.states.emphasis.style
							 | 
						||
| 
								 | 
							
								                ? el.states.emphasis.style
							 | 
						||
| 
								 | 
							
								                : {};
							 | 
						||
| 
								 | 
							
								            var fill = emphasisStyle.fill;
							 | 
						||
| 
								 | 
							
								            if (!fill) {
							 | 
						||
| 
								 | 
							
								                var normalFill = el.style && el.style.fill;
							 | 
						||
| 
								 | 
							
								                var selectFill = el.states.select
							 | 
						||
| 
								 | 
							
								                    && el.states.select.style
							 | 
						||
| 
								 | 
							
								                    && el.states.select.style.fill;
							 | 
						||
| 
								 | 
							
								                var fromFill = el.currentStates.indexOf('select') >= 0
							 | 
						||
| 
								 | 
							
								                    ? (selectFill || normalFill)
							 | 
						||
| 
								 | 
							
								                    : normalFill;
							 | 
						||
| 
								 | 
							
								                if (fromFill) {
							 | 
						||
| 
								 | 
							
								                    fill = liftColor(fromFill);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            var lineWidth = emphasisStyle.lineWidth;
							 | 
						||
| 
								 | 
							
								            if (lineWidth) {
							 | 
						||
| 
								 | 
							
								                var scaleX = (!emphasisStyle.strokeNoScale && el.transform)
							 | 
						||
| 
								 | 
							
								                    ? el.transform[0]
							 | 
						||
| 
								 | 
							
								                    : 1;
							 | 
						||
| 
								 | 
							
								                lineWidth = lineWidth / scaleX;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            var style = {
							 | 
						||
| 
								 | 
							
								                cursor: 'pointer'
							 | 
						||
| 
								 | 
							
								            };
							 | 
						||
| 
								 | 
							
								            if (fill) {
							 | 
						||
| 
								 | 
							
								                style.fill = fill;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if (emphasisStyle.stroke) {
							 | 
						||
| 
								 | 
							
								                style.stroke = emphasisStyle.stroke;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if (lineWidth) {
							 | 
						||
| 
								 | 
							
								                style['stroke-width'] = lineWidth;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            setClassAttribute(style, attrs, scope, true);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function setClassAttribute(style, attrs, scope, withHover) {
							 | 
						||
| 
								 | 
							
								    var styleKey = JSON.stringify(style);
							 | 
						||
| 
								 | 
							
								    var className = scope.cssStyleCache[styleKey];
							 | 
						||
| 
								 | 
							
								    if (!className) {
							 | 
						||
| 
								 | 
							
								        className = scope.zrId + '-cls-' + getClassId();
							 | 
						||
| 
								 | 
							
								        scope.cssStyleCache[styleKey] = className;
							 | 
						||
| 
								 | 
							
								        scope.cssNodes['.' + className + (withHover ? ':hover' : '')] = style;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    attrs["class"] = attrs["class"] ? (attrs["class"] + ' ' + className) : className;
							 | 
						||
| 
								 | 
							
								}
							 |