* #issue-fix The new menu will ask if you want to erase the current content but it will ignore the answer * #issue-fix dialog needs to be closer than the original * #issue-fix main menu alignment changes * #issue_fix double click and opensvg issue fixed * #issue-fix process_cancel change to seConfirm * #issue-fix review how the top toolbar display when many buttons are displayed * #issue-fix unwanted css reoved * #issue-fix BOTTOM TOOLS Make sure all features of the bottom toolbar are working * #issue-fix IMPORT IMAGE menu open issue fixed * #issue-fix alert dialog overwrite style * #issue-fix lint issue fixed * npm update + associated fixes * #36 look of opacity button should like the zoom button (without the dropdown button) * #37 Clicking anywhere on the bottom bar (for example below the opacity button is displaying the “color popup”.) * #38 The opacity button does not update with the current element * #42 When you import an image, it works well but the dialog should disappear automatically * Fixes #53: 4th option for the background display fixed * Fixes #53: 4th option for the background fixed * #49 the x button does not work * Fixes #41: Alignment fixes in bottom bar * fix test scenario * #39 opacity button/stroke size/radius button don’t allow the 0 value * #41 The look and alignment of stroke size and stroke style should be consistent with the rest of the bottom bar. * #44 Text font dropdown is broken * #52 Fix the export * Fixes #44: Text font dropdown fixed * Fixes #44: Text font dropdown fixed * Fixes #44: Text font dropdown fixed * Fixes #44: Text font dropdown fixed * Update index.html * update husky * fixes * moves from index.html to js * fix #66 * fix #48 first set of new icons * Reorganize tools in left panel to be more intuitive * Update button styles to adapt to new icons * Fix #48 new set of icons for alignments * Variabilisation of icon bkgd colors Update of color choice to fit new icons design * Update canvas and rulers colors * Improve layer handle design * Modernize SVG Logo but keeping original spirit * Fix #48 continue improve icons * Continue to reorganise left panel * Update right panel handle for layers * Fix #48 new set of icons for main menu * Improve main menu design * Rework menu organisation * Rework menu organisation * Update input element design * New icons * Improve Zoom Module * Improve Color Picker Module * New icons * New icons * #65 restore the feature of start/end marker lines partially did * #64 The export dialog needs to include the quality options (except for PDF) * #39 opacity button/stroke size/radius button don’t allow the 0 value * #39 eslint changes * #69 menu button style overwrite * #65 restore the feature of start/end marker lines * #43 With a small window, the look of the top toolbar is broken * #43 tool top alignment revert * #46 Move this jQuery component to a web component for graduate and picker components * #46 Move this jQuery component to a web component * remove some non standard lint rules * #46 picker convert as pure javascript changes * #46 jquery plugin convert to pure javascript * #46 jquery plugin change to pure javascript * #46 jquery remove and convert to pure javascript * #46 slider issue fixed * #46 ColorValuePicker and js convertion * #46 globals $ remov from slider class * #46 jquery convert pure javascript changes * #46 jquery to js convertion changes * #46 paintbox and current element color set issue fixed * #46 unwanted files removed * #46 $.extend modify changes * #46 extend modifiey changes * #46 $.extend change to pure javascript * #46 extend and data changes * #46 jquery removed * #45 These buttons don't work and dropdown is broken * #45 These buttons don't work and dropdown is broken * #45 These buttons don't work and dropdown is broken commit reverted * #43 With a small window, the look of the top toolbar is broken * Update jQuery.jPicker.js * #76 draggable modification changes * #76 jquery-ui-1.8.17.custom.min.js removed from editor * #76 jquery ui file removed * npm update * #77 console issue fixed * #77 <SVG> button issue fixed * #77 shortkey issue fixed * #77 jquery hotkeys plugin changes * #77 hotkey plugin related changes * #78 hotkey related code comment. * #78 js-hotkeys/jquery.hotkeys.min.js file removed from svgedit.js * #51 Rewrite the color palette without elix * #81 unwanted files removed * #81 folder name renamed * #81 folder rename changes * #81 jquery-ui folder renamed * #81 jquery modify changes * #81 globals $ removed Co-authored-by: Agriya Dev5 <agriya.dev5@agriya.in> Co-authored-by: mathieucura <mathieu@optimistik.fr>
198 lines
5.6 KiB
JavaScript
198 lines
5.6 KiB
JavaScript
/* globals $ */
|
|
import {jGraduate} from '../components/jgraduate/jQuery.jGraduate.js';
|
|
import SvgCanvas from '../../svgcanvas/svgcanvas.js';
|
|
|
|
const {$id} = SvgCanvas;
|
|
|
|
/*
|
|
* register actions for left panel
|
|
*/
|
|
/**
|
|
*
|
|
*/
|
|
class BottomPanelHandlers {
|
|
/**
|
|
* @param {PlainObject} editor svgedit handler
|
|
*/
|
|
constructor (editor) {
|
|
this.editor = editor;
|
|
this.svgCanvas = editor.svgCanvas;
|
|
}
|
|
/**
|
|
* @type {module}
|
|
*/
|
|
get selectedElement () {
|
|
return this.editor.selectedElement;
|
|
}
|
|
/**
|
|
* @type {module}
|
|
*/
|
|
get multiselected () {
|
|
return this.editor.multiselected;
|
|
}
|
|
|
|
/**
|
|
* @type {module}
|
|
*/
|
|
changeStrokeWidth (e) {
|
|
let val = e.target.value;
|
|
if (val === 0 && this.selectedElement && ['line', 'polyline'].includes(this.selectedElement.nodeName)) {
|
|
val = 1;
|
|
}
|
|
this.svgCanvas.setStrokeWidth(val);
|
|
}
|
|
|
|
/**
|
|
* @type {module}
|
|
*/
|
|
changeZoom (value) {
|
|
switch (value) {
|
|
case 'canvas':
|
|
case 'selection':
|
|
case 'layer':
|
|
case 'content':
|
|
this.editor.zoomChanged(window, value);
|
|
break;
|
|
default:
|
|
{
|
|
const zoomlevel = Number(value) / 100;
|
|
if (zoomlevel < 0.001) {
|
|
value = 0.1;
|
|
return;
|
|
}
|
|
const zoom = this.svgCanvas.getZoom();
|
|
const wArea = this.editor.workarea;
|
|
|
|
this.editor.zoomChanged(window, {
|
|
width: 0,
|
|
height: 0,
|
|
// center pt of scroll position
|
|
x: (wArea[0].scrollLeft + wArea.width() / 2) / zoom,
|
|
y: (wArea[0].scrollTop + wArea.height() / 2) / zoom,
|
|
zoom: zoomlevel
|
|
}, true);
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* @fires module:svgcanvas.SvgCanvas#event:ext_toolButtonStateUpdate
|
|
* @returns {void}
|
|
*/
|
|
updateToolButtonState () {
|
|
const bNoFill = (this.svgCanvas.getColor('fill') === 'none');
|
|
const bNoStroke = (this.svgCanvas.getColor('stroke') === 'none');
|
|
const buttonsNeedingStroke = ['tool_fhpath', 'tool_line'];
|
|
const buttonsNeedingFillAndStroke = [
|
|
'tools_rect', 'tools_ellipse',
|
|
'tool_text', 'tool_path'
|
|
];
|
|
|
|
if (bNoStroke) {
|
|
buttonsNeedingStroke.forEach((btn) => {
|
|
// if btn is pressed, change to select button
|
|
if ($id(btn).pressed) {
|
|
this.editor.leftPanelHandlers.clickSelect();
|
|
}
|
|
$(btn).disabled = true;
|
|
});
|
|
} else {
|
|
buttonsNeedingStroke.forEach((btn) => {
|
|
$id(btn).disabled = false;
|
|
});
|
|
}
|
|
|
|
if (bNoStroke && bNoFill) {
|
|
buttonsNeedingFillAndStroke.forEach((btn) => {
|
|
// if btn is pressed, change to select button
|
|
if ($id(btn).pressed) {
|
|
this.editor.leftPanelHandlers.clickSelect();
|
|
}
|
|
$(btn).disabled = true;
|
|
});
|
|
} else {
|
|
buttonsNeedingFillAndStroke.forEach((btn) => {
|
|
$id(btn).disabled = false;
|
|
});
|
|
}
|
|
|
|
this.svgCanvas.runExtensions(
|
|
'toolButtonStateUpdate',
|
|
/** @type {module:svgcanvas.SvgCanvas#event:ext_toolButtonStateUpdate} */ {
|
|
nofill: bNoFill,
|
|
nostroke: bNoStroke
|
|
}
|
|
);
|
|
}
|
|
/**
|
|
* @type {module}
|
|
*/
|
|
updateColorpickers (apply) {
|
|
$id('fill_color').update(this.svgCanvas, this.selectedElement, apply);
|
|
$id('stroke_color').update(this.svgCanvas, this.selectedElement, apply);
|
|
}
|
|
|
|
/**
|
|
* @type {module}
|
|
*/
|
|
handleColorPicker (type, evt) {
|
|
const {paint} = evt.detail;
|
|
this.svgCanvas.setPaint(type, paint);
|
|
this.updateToolButtonState();
|
|
}
|
|
/**
|
|
* @type {module}
|
|
*/
|
|
handleStrokeAttr (type, evt) {
|
|
this.svgCanvas.setStrokeAttr(type, evt.detail.value);
|
|
}
|
|
/**
|
|
* @type {module}
|
|
*/
|
|
handleOpacity (evt) {
|
|
// if ($(this).find('div').length) { return; }
|
|
const val = Number.parseInt(evt.currentTarget.value.split('%')[0]);
|
|
this.svgCanvas.setOpacity(val / 100);
|
|
}
|
|
/**
|
|
* @type {module}
|
|
*/
|
|
handlePalette (e) {
|
|
e.preventDefault();
|
|
// shift key or right click for stroke
|
|
const {picker, color} = e.detail;
|
|
// Webkit-based browsers returned 'initial' here for no stroke
|
|
const paint = color === 'none' ? new jGraduate.Paint() : new jGraduate.Paint({alpha: 100, solidColor: color.substr(1)});
|
|
if (picker === 'fill') {
|
|
$id('fill_color').setPaint(paint);
|
|
} else {
|
|
$id('stroke_color').setPaint(paint);
|
|
}
|
|
this.svgCanvas.setColor(picker, color);
|
|
if (color !== 'none' && this.svgCanvas.getPaintOpacity(picker) !== 1) {
|
|
this.svgCanvas.setPaintOpacity(picker, 1.0);
|
|
}
|
|
this.updateToolButtonState();
|
|
}
|
|
|
|
/**
|
|
* @type {module}
|
|
*/
|
|
init () {
|
|
// register actions for bottom panel
|
|
$id('zoom').addEventListener('change', (e) => this.changeZoom.bind(this)(e.detail.value));
|
|
$id('stroke_color').addEventListener('change', (evt) => this.handleColorPicker.bind(this)('stroke', evt));
|
|
$id('fill_color').addEventListener('change', (evt) => this.handleColorPicker.bind(this)('fill', evt));
|
|
$id('stroke_width').addEventListener('change', this.changeStrokeWidth.bind(this));
|
|
$id('stroke_style').addEventListener('change', (evt) => this.handleStrokeAttr.bind(this)('stroke-dasharray', evt));
|
|
$id('stroke_linejoin').addEventListener('change', (evt) => this.handleStrokeAttr.bind(this)('stroke-linejoin', evt));
|
|
$id('stroke_linecap').addEventListener('change', (evt) => this.handleStrokeAttr.bind(this)('stroke-linecap', evt));
|
|
$id('opacity').addEventListener('change', this.handleOpacity.bind(this));
|
|
$id('palette').addEventListener('change', this.handlePalette.bind(this));
|
|
const {curConfig} = this.editor.configObj;
|
|
$id('fill_color').setPaint(new jGraduate.Paint({alpha: 100, solidColor: curConfig.initFill.color}));
|
|
$id('stroke_color').setPaint(new jGraduate.Paint({alpha: 100, solidColor: curConfig.initStroke.color}));
|
|
}
|
|
}
|
|
|
|
export default BottomPanelHandlers;
|