parent
8619a17333
commit
13cdaedc63
|
@ -1,3 +0,0 @@
|
|||
paths:
|
||||
- src
|
||||
- packages
|
|
@ -1,73 +0,0 @@
|
|||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ "master" ]
|
||||
schedule:
|
||||
- cron: '20 20 * * 6'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'javascript' ]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
||||
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
|
||||
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||
config-file: ./.github/codeql/codeql-config.yml
|
||||
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||
|
||||
# If the Autobuild fails above, remove it and uncomment the following three lines.
|
||||
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
|
||||
|
||||
# - run: |
|
||||
# echo "Run, Build Application using script"
|
||||
# ./location_of_script_within_repo/buildscript.sh
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
|
@ -4,7 +4,7 @@
|
|||
"@babel/env",
|
||||
{
|
||||
"useBuiltIns": "entry",
|
||||
"corejs": "3.26"
|
||||
"corejs": "3.27"
|
||||
}
|
||||
]
|
||||
]
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
{"total": {"lines":{"total":6260,"covered":3507,"skipped":0,"pct":56.02},"statements":{"total":6571,"covered":3601,"skipped":0,"pct":54.8},"functions":{"total":949,"covered":454,"skipped":0,"pct":47.84},"branches":{"total":3223,"covered":1288,"skipped":0,"pct":39.96}}
|
||||
{"total": {"lines":{"total":6260,"covered":3796,"skipped":0,"pct":60.64},"statements":{"total":6574,"covered":3913,"skipped":0,"pct":59.52},"functions":{"total":949,"covered":495,"skipped":0,"pct":52.16},"branches":{"total":3223,"covered":1398,"skipped":0,"pct":43.38}}
|
||||
,"/Users/jfhenon/Work/svgedit/packages/svgcanvas/common/browser.js": {"lines":{"total":25,"covered":24,"skipped":0,"pct":96},"functions":{"total":6,"covered":2,"skipped":0,"pct":33.33},"statements":{"total":30,"covered":25,"skipped":0,"pct":83.33},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfhenon/Work/svgedit/packages/svgcanvas/common/util.js": {"lines":{"total":90,"covered":8,"skipped":0,"pct":8.89},"functions":{"total":7,"covered":3,"skipped":0,"pct":42.86},"statements":{"total":92,"covered":10,"skipped":0,"pct":10.87},"branches":{"total":98,"covered":10,"skipped":0,"pct":10.2}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/ConfigObj.js": {"lines":{"total":101,"covered":46,"skipped":0,"pct":45.54},"functions":{"total":14,"covered":11,"skipped":0,"pct":78.57},"statements":{"total":102,"covered":46,"skipped":0,"pct":45.1},"branches":{"total":96,"covered":30,"skipped":0,"pct":31.25}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/Editor.js": {"lines":{"total":410,"covered":184,"skipped":0,"pct":44.88},"functions":{"total":102,"covered":32,"skipped":0,"pct":31.37},"statements":{"total":417,"covered":185,"skipped":0,"pct":44.36},"branches":{"total":213,"covered":66,"skipped":0,"pct":30.99}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/EditorStartup.js": {"lines":{"total":346,"covered":210,"skipped":0,"pct":60.69},"functions":{"total":51,"covered":25,"skipped":0,"pct":49.02},"statements":{"total":357,"covered":218,"skipped":0,"pct":61.06},"branches":{"total":122,"covered":38,"skipped":0,"pct":31.15}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/Editor.js": {"lines":{"total":410,"covered":200,"skipped":0,"pct":48.78},"functions":{"total":102,"covered":34,"skipped":0,"pct":33.33},"statements":{"total":417,"covered":201,"skipped":0,"pct":48.2},"branches":{"total":213,"covered":78,"skipped":0,"pct":36.62}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/EditorStartup.js": {"lines":{"total":346,"covered":216,"skipped":0,"pct":62.43},"functions":{"total":51,"covered":27,"skipped":0,"pct":52.94},"statements":{"total":357,"covered":224,"skipped":0,"pct":62.75},"branches":{"total":122,"covered":41,"skipped":0,"pct":33.61}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/MainMenu.js": {"lines":{"total":111,"covered":44,"skipped":0,"pct":39.64},"functions":{"total":14,"covered":7,"skipped":0,"pct":50},"statements":{"total":111,"covered":44,"skipped":0,"pct":39.64},"branches":{"total":48,"covered":7,"skipped":0,"pct":14.58}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/Rulers.js": {"lines":{"total":119,"covered":91,"skipped":0,"pct":76.47},"functions":{"total":6,"covered":4,"skipped":0,"pct":66.67},"statements":{"total":124,"covered":94,"skipped":0,"pct":75.81},"branches":{"total":43,"covered":30,"skipped":0,"pct":69.77}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/Rulers.js": {"lines":{"total":119,"covered":93,"skipped":0,"pct":78.15},"functions":{"total":6,"covered":5,"skipped":0,"pct":83.33},"statements":{"total":124,"covered":98,"skipped":0,"pct":79.03},"branches":{"total":43,"covered":32,"skipped":0,"pct":74.42}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/browser-not-supported.js": {"lines":{"total":4,"covered":3,"skipped":0,"pct":75},"functions":{"total":1,"covered":1,"skipped":0,"pct":100},"statements":{"total":4,"covered":3,"skipped":0,"pct":75},"branches":{"total":4,"covered":3,"skipped":0,"pct":75}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/contextmenu.js": {"lines":{"total":22,"covered":9,"skipped":0,"pct":40.91},"functions":{"total":8,"covered":1,"skipped":0,"pct":12.5},"statements":{"total":23,"covered":9,"skipped":0,"pct":39.13},"branches":{"total":13,"covered":0,"skipped":0,"pct":0}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/locale.js": {"lines":{"total":14,"covered":9,"skipped":0,"pct":64.29},"functions":{"total":2,"covered":2,"skipped":0,"pct":100},"statements":{"total":14,"covered":9,"skipped":0,"pct":64.29},"branches":{"total":10,"covered":3,"skipped":0,"pct":30}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/PaintBox.js": {"lines":{"total":64,"covered":35,"skipped":0,"pct":54.69},"functions":{"total":4,"covered":4,"skipped":0,"pct":100},"statements":{"total":67,"covered":35,"skipped":0,"pct":52.24},"branches":{"total":33,"covered":11,"skipped":0,"pct":33.33}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/PaintBox.js": {"lines":{"total":64,"covered":51,"skipped":0,"pct":79.69},"functions":{"total":4,"covered":4,"skipped":0,"pct":100},"statements":{"total":67,"covered":53,"skipped":0,"pct":79.1},"branches":{"total":33,"covered":21,"skipped":0,"pct":63.64}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/index.js": {"lines":{"total":0,"covered":0,"skipped":0,"pct":100},"functions":{"total":0,"covered":0,"skipped":0,"pct":100},"statements":{"total":0,"covered":0,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/seButton.js": {"lines":{"total":57,"covered":40,"skipped":0,"pct":70.18},"functions":{"total":15,"covered":7,"skipped":0,"pct":46.67},"statements":{"total":60,"covered":42,"skipped":0,"pct":70},"branches":{"total":33,"covered":23,"skipped":0,"pct":69.7}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/seColorPicker.js": {"lines":{"total":50,"covered":41,"skipped":0,"pct":82},"functions":{"total":16,"covered":11,"skipped":0,"pct":68.75},"statements":{"total":51,"covered":41,"skipped":0,"pct":80.39},"branches":{"total":11,"covered":8,"skipped":0,"pct":72.73}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/seExplorerButton.js": {"lines":{"total":95,"covered":72,"skipped":0,"pct":75.79},"functions":{"total":17,"covered":10,"skipped":0,"pct":58.82},"statements":{"total":98,"covered":72,"skipped":0,"pct":73.47},"branches":{"total":30,"covered":17,"skipped":0,"pct":56.67}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/seFlyingButton.js": {"lines":{"total":74,"covered":42,"skipped":0,"pct":56.76},"functions":{"total":14,"covered":8,"skipped":0,"pct":57.14},"statements":{"total":75,"covered":42,"skipped":0,"pct":56},"branches":{"total":29,"covered":9,"skipped":0,"pct":31.03}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/seFlyingButton.js": {"lines":{"total":74,"covered":47,"skipped":0,"pct":63.51},"functions":{"total":14,"covered":9,"skipped":0,"pct":64.29},"statements":{"total":75,"covered":48,"skipped":0,"pct":64},"branches":{"total":29,"covered":12,"skipped":0,"pct":41.38}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/seInput.js": {"lines":{"total":46,"covered":31,"skipped":0,"pct":67.39},"functions":{"total":16,"covered":8,"skipped":0,"pct":50},"statements":{"total":47,"covered":31,"skipped":0,"pct":65.96},"branches":{"total":8,"covered":4,"skipped":0,"pct":50}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/seList.js": {"lines":{"total":87,"covered":59,"skipped":0,"pct":67.82},"functions":{"total":21,"covered":10,"skipped":0,"pct":47.62},"statements":{"total":89,"covered":61,"skipped":0,"pct":68.54},"branches":{"total":22,"covered":12,"skipped":0,"pct":54.55}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/seListItem.js": {"lines":{"total":39,"covered":26,"skipped":0,"pct":66.67},"functions":{"total":12,"covered":4,"skipped":0,"pct":33.33},"statements":{"total":40,"covered":27,"skipped":0,"pct":67.5},"branches":{"total":10,"covered":8,"skipped":0,"pct":80}}
|
||||
|
@ -26,15 +26,15 @@
|
|||
,"/Users/jfhenon/Work/svgedit/src/editor/components/seSelect.js": {"lines":{"total":56,"covered":45,"skipped":0,"pct":80.36},"functions":{"total":17,"covered":9,"skipped":0,"pct":52.94},"statements":{"total":59,"covered":47,"skipped":0,"pct":79.66},"branches":{"total":16,"covered":14,"skipped":0,"pct":87.5}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/seSpinInput.js": {"lines":{"total":65,"covered":55,"skipped":0,"pct":84.62},"functions":{"total":18,"covered":10,"skipped":0,"pct":55.56},"statements":{"total":66,"covered":55,"skipped":0,"pct":83.33},"branches":{"total":17,"covered":13,"skipped":0,"pct":76.47}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/seText.js": {"lines":{"total":28,"covered":18,"skipped":0,"pct":64.29},"functions":{"total":10,"covered":4,"skipped":0,"pct":40},"statements":{"total":29,"covered":18,"skipped":0,"pct":62.07},"branches":{"total":8,"covered":5,"skipped":0,"pct":62.5}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/seZoom.js": {"lines":{"total":99,"covered":62,"skipped":0,"pct":62.63},"functions":{"total":28,"covered":9,"skipped":0,"pct":32.14},"statements":{"total":104,"covered":63,"skipped":0,"pct":60.58},"branches":{"total":36,"covered":7,"skipped":0,"pct":19.44}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/seZoom.js": {"lines":{"total":99,"covered":93,"skipped":0,"pct":93.94},"functions":{"total":28,"covered":24,"skipped":0,"pct":85.71},"statements":{"total":107,"covered":100,"skipped":0,"pct":93.46},"branches":{"total":36,"covered":21,"skipped":0,"pct":58.33}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/jgraduate/ColorValuePicker.js": {"lines":{"total":231,"covered":54,"skipped":0,"pct":23.38},"functions":{"total":9,"covered":3,"skipped":0,"pct":33.33},"statements":{"total":249,"covered":63,"skipped":0,"pct":25.3},"branches":{"total":157,"covered":34,"skipped":0,"pct":21.66}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/jgraduate/Slider.js": {"lines":{"total":156,"covered":91,"skipped":0,"pct":58.33},"functions":{"total":17,"covered":9,"skipped":0,"pct":52.94},"statements":{"total":176,"covered":96,"skipped":0,"pct":54.55},"branches":{"total":186,"covered":96,"skipped":0,"pct":51.61}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/jgraduate/jQuery.jGraduate.js": {"lines":{"total":580,"covered":275,"skipped":0,"pct":47.41},"functions":{"total":44,"covered":14,"skipped":0,"pct":31.82},"statements":{"total":602,"covered":281,"skipped":0,"pct":46.68},"branches":{"total":278,"covered":99,"skipped":0,"pct":35.61}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/jgraduate/Slider.js": {"lines":{"total":156,"covered":91,"skipped":0,"pct":58.33},"functions":{"total":17,"covered":9,"skipped":0,"pct":52.94},"statements":{"total":176,"covered":96,"skipped":0,"pct":54.55},"branches":{"total":186,"covered":97,"skipped":0,"pct":52.15}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/jgraduate/jQuery.jGraduate.js": {"lines":{"total":580,"covered":275,"skipped":0,"pct":47.41},"functions":{"total":44,"covered":14,"skipped":0,"pct":31.82},"statements":{"total":602,"covered":282,"skipped":0,"pct":46.84},"branches":{"total":278,"covered":100,"skipped":0,"pct":35.97}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/components/jgraduate/jQuery.jPicker.js": {"lines":{"total":840,"covered":449,"skipped":0,"pct":53.45},"functions":{"total":60,"covered":39,"skipped":0,"pct":65},"statements":{"total":926,"covered":475,"skipped":0,"pct":51.3},"branches":{"total":777,"covered":327,"skipped":0,"pct":42.08}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/dialogs/SePlainAlertDialog.js": {"lines":{"total":7,"covered":1,"skipped":0,"pct":14.29},"functions":{"total":1,"covered":0,"skipped":0,"pct":0},"statements":{"total":7,"covered":1,"skipped":0,"pct":14.29},"branches":{"total":2,"covered":0,"skipped":0,"pct":0}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/dialogs/cmenuDialog.js": {"lines":{"total":120,"covered":112,"skipped":0,"pct":93.33},"functions":{"total":28,"covered":15,"skipped":0,"pct":53.57},"statements":{"total":131,"covered":116,"skipped":0,"pct":88.55},"branches":{"total":23,"covered":19,"skipped":0,"pct":82.61}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/dialogs/cmenuDialog.js": {"lines":{"total":120,"covered":112,"skipped":0,"pct":93.33},"functions":{"total":28,"covered":16,"skipped":0,"pct":57.14},"statements":{"total":131,"covered":117,"skipped":0,"pct":89.31},"branches":{"total":23,"covered":19,"skipped":0,"pct":82.61}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/dialogs/cmenuLayersDialog.js": {"lines":{"total":61,"covered":49,"skipped":0,"pct":80.33},"functions":{"total":16,"covered":6,"skipped":0,"pct":37.5},"statements":{"total":66,"covered":49,"skipped":0,"pct":74.24},"branches":{"total":18,"covered":13,"skipped":0,"pct":72.22}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/dialogs/editorPreferencesDialog.js": {"lines":{"total":157,"covered":124,"skipped":0,"pct":78.98},"functions":{"total":30,"covered":9,"skipped":0,"pct":30},"statements":{"total":159,"covered":125,"skipped":0,"pct":78.62},"branches":{"total":46,"covered":34,"skipped":0,"pct":73.91}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/dialogs/editorPreferencesDialog.js": {"lines":{"total":157,"covered":125,"skipped":0,"pct":79.62},"functions":{"total":30,"covered":9,"skipped":0,"pct":30},"statements":{"total":159,"covered":126,"skipped":0,"pct":79.25},"branches":{"total":46,"covered":35,"skipped":0,"pct":76.09}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/dialogs/exportDialog.js": {"lines":{"total":55,"covered":39,"skipped":0,"pct":70.91},"functions":{"total":14,"covered":5,"skipped":0,"pct":35.71},"statements":{"total":58,"covered":39,"skipped":0,"pct":67.24},"branches":{"total":12,"covered":6,"skipped":0,"pct":50}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/dialogs/imagePropertiesDialog.js": {"lines":{"total":161,"covered":90,"skipped":0,"pct":55.9},"functions":{"total":20,"covered":5,"skipped":0,"pct":25},"statements":{"total":162,"covered":90,"skipped":0,"pct":55.56},"branches":{"total":53,"covered":23,"skipped":0,"pct":43.4}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/dialogs/index.js": {"lines":{"total":0,"covered":0,"skipped":0,"pct":100},"functions":{"total":0,"covered":0,"skipped":0,"pct":100},"statements":{"total":0,"covered":0,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
|
@ -42,11 +42,11 @@
|
|||
,"/Users/jfhenon/Work/svgedit/src/editor/dialogs/seConfirmDialog.js": {"lines":{"total":8,"covered":2,"skipped":0,"pct":25},"functions":{"total":1,"covered":0,"skipped":0,"pct":0},"statements":{"total":8,"covered":2,"skipped":0,"pct":25},"branches":{"total":2,"covered":0,"skipped":0,"pct":0}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/dialogs/sePromptDialog.js": {"lines":{"total":24,"covered":5,"skipped":0,"pct":20.83},"functions":{"total":7,"covered":2,"skipped":0,"pct":28.57},"statements":{"total":24,"covered":5,"skipped":0,"pct":20.83},"branches":{"total":9,"covered":0,"skipped":0,"pct":0}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/dialogs/seSelectDialog.js": {"lines":{"total":8,"covered":2,"skipped":0,"pct":25},"functions":{"total":1,"covered":0,"skipped":0,"pct":0},"statements":{"total":8,"covered":2,"skipped":0,"pct":25},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/dialogs/svgSourceDialog.js": {"lines":{"total":74,"covered":56,"skipped":0,"pct":75.68},"functions":{"total":17,"covered":6,"skipped":0,"pct":35.29},"statements":{"total":75,"covered":56,"skipped":0,"pct":74.67},"branches":{"total":17,"covered":13,"skipped":0,"pct":76.47}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/dialogs/svgSourceDialog.js": {"lines":{"total":74,"covered":56,"skipped":0,"pct":75.68},"functions":{"total":17,"covered":6,"skipped":0,"pct":35.29},"statements":{"total":75,"covered":57,"skipped":0,"pct":76},"branches":{"total":17,"covered":14,"skipped":0,"pct":82.35}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/dialogs/se-elix/define/NumberSpinBox.js": {"lines":{"total":1,"covered":1,"skipped":0,"pct":100},"functions":{"total":0,"covered":0,"skipped":0,"pct":100},"statements":{"total":1,"covered":1,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/dialogs/se-elix/src/base/NumberSpinBox.js": {"lines":{"total":54,"covered":52,"skipped":0,"pct":96.3},"functions":{"total":13,"covered":11,"skipped":0,"pct":84.62},"statements":{"total":54,"covered":52,"skipped":0,"pct":96.3},"branches":{"total":53,"covered":46,"skipped":0,"pct":86.79}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/dialogs/se-elix/src/base/NumberSpinBox.js": {"lines":{"total":54,"covered":52,"skipped":0,"pct":96.3},"functions":{"total":13,"covered":11,"skipped":0,"pct":84.62},"statements":{"total":54,"covered":52,"skipped":0,"pct":96.3},"branches":{"total":53,"covered":47,"skipped":0,"pct":88.68}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/dialogs/se-elix/src/plain/PlainNumberSpinBox.js": {"lines":{"total":0,"covered":0,"skipped":0,"pct":100},"functions":{"total":0,"covered":0,"skipped":0,"pct":100},"statements":{"total":0,"covered":0,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/extensions/ext-eyedropper/ext-eyedropper.js": {"lines":{"total":60,"covered":39,"skipped":0,"pct":65},"functions":{"total":8,"covered":5,"skipped":0,"pct":62.5},"statements":{"total":71,"covered":39,"skipped":0,"pct":54.93},"branches":{"total":39,"covered":14,"skipped":0,"pct":35.9}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/extensions/ext-eyedropper/ext-eyedropper.js": {"lines":{"total":60,"covered":39,"skipped":0,"pct":65},"functions":{"total":8,"covered":5,"skipped":0,"pct":62.5},"statements":{"total":71,"covered":39,"skipped":0,"pct":54.93},"branches":{"total":39,"covered":15,"skipped":0,"pct":38.46}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/extensions/ext-eyedropper/locale/en.js": {"lines":{"total":0,"covered":0,"skipped":0,"pct":100},"functions":{"total":0,"covered":0,"skipped":0,"pct":100},"statements":{"total":0,"covered":0,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/extensions/ext-grid/ext-grid.js": {"lines":{"total":88,"covered":43,"skipped":0,"pct":48.86},"functions":{"total":8,"covered":4,"skipped":0,"pct":50},"statements":{"total":90,"covered":43,"skipped":0,"pct":47.78},"branches":{"total":10,"covered":4,"skipped":0,"pct":40}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/extensions/ext-grid/locale/en.js": {"lines":{"total":0,"covered":0,"skipped":0,"pct":100},"functions":{"total":0,"covered":0,"skipped":0,"pct":100},"statements":{"total":0,"covered":0,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
|
@ -55,15 +55,15 @@
|
|||
,"/Users/jfhenon/Work/svgedit/src/editor/extensions/ext-opensave/locale/en.js": {"lines":{"total":0,"covered":0,"skipped":0,"pct":100},"functions":{"total":0,"covered":0,"skipped":0,"pct":100},"statements":{"total":0,"covered":0,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/extensions/ext-panning/ext-panning.js": {"lines":{"total":30,"covered":22,"skipped":0,"pct":73.33},"functions":{"total":7,"covered":6,"skipped":0,"pct":85.71},"statements":{"total":30,"covered":22,"skipped":0,"pct":73.33},"branches":{"total":6,"covered":2,"skipped":0,"pct":33.33}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/extensions/ext-panning/locale/en.js": {"lines":{"total":0,"covered":0,"skipped":0,"pct":100},"functions":{"total":0,"covered":0,"skipped":0,"pct":100},"statements":{"total":0,"covered":0,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/extensions/ext-polystar/ext-polystar.js": {"lines":{"total":247,"covered":63,"skipped":0,"pct":25.51},"functions":{"total":18,"covered":8,"skipped":0,"pct":44.44},"statements":{"total":256,"covered":63,"skipped":0,"pct":24.61},"branches":{"total":62,"covered":10,"skipped":0,"pct":16.13}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/extensions/ext-polystar/ext-polystar.js": {"lines":{"total":247,"covered":232,"skipped":0,"pct":93.93},"functions":{"total":18,"covered":16,"skipped":0,"pct":88.89},"statements":{"total":256,"covered":241,"skipped":0,"pct":94.14},"branches":{"total":62,"covered":39,"skipped":0,"pct":62.9}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/extensions/ext-polystar/locale/en.js": {"lines":{"total":0,"covered":0,"skipped":0,"pct":100},"functions":{"total":0,"covered":0,"skipped":0,"pct":100},"statements":{"total":0,"covered":0,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/extensions/ext-shapes/ext-shapes.js": {"lines":{"total":76,"covered":74,"skipped":0,"pct":97.37},"functions":{"total":7,"covered":7,"skipped":0,"pct":100},"statements":{"total":80,"covered":78,"skipped":0,"pct":97.5},"branches":{"total":26,"covered":17,"skipped":0,"pct":65.38}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/extensions/ext-shapes/locale/en.js": {"lines":{"total":0,"covered":0,"skipped":0,"pct":100},"functions":{"total":0,"covered":0,"skipped":0,"pct":100},"statements":{"total":0,"covered":0,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/extensions/ext-storage/ext-storage.js": {"lines":{"total":91,"covered":59,"skipped":0,"pct":64.84},"functions":{"total":12,"covered":7,"skipped":0,"pct":58.33},"statements":{"total":91,"covered":59,"skipped":0,"pct":64.84},"branches":{"total":68,"covered":27,"skipped":0,"pct":39.71}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/extensions/ext-storage/storageDialog.js": {"lines":{"total":60,"covered":56,"skipped":0,"pct":93.33},"functions":{"total":10,"covered":7,"skipped":0,"pct":70},"statements":{"total":62,"covered":57,"skipped":0,"pct":91.94},"branches":{"total":15,"covered":13,"skipped":0,"pct":86.67}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/locale/lang.en.js": {"lines":{"total":0,"covered":0,"skipped":0,"pct":100},"functions":{"total":0,"covered":0,"skipped":0,"pct":100},"statements":{"total":0,"covered":0,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/panels/BottomPanel.js": {"lines":{"total":71,"covered":56,"skipped":0,"pct":78.87},"functions":{"total":22,"covered":14,"skipped":0,"pct":63.64},"statements":{"total":77,"covered":59,"skipped":0,"pct":76.62},"branches":{"total":30,"covered":12,"skipped":0,"pct":40}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/panels/BottomPanel.js": {"lines":{"total":71,"covered":58,"skipped":0,"pct":81.69},"functions":{"total":22,"covered":14,"skipped":0,"pct":63.64},"statements":{"total":77,"covered":61,"skipped":0,"pct":79.22},"branches":{"total":30,"covered":16,"skipped":0,"pct":53.33}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/panels/LayersPanel.js": {"lines":{"total":157,"covered":70,"skipped":0,"pct":44.59},"functions":{"total":27,"covered":6,"skipped":0,"pct":22.22},"statements":{"total":163,"covered":71,"skipped":0,"pct":43.56},"branches":{"total":46,"covered":6,"skipped":0,"pct":13.04}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/panels/LeftPanel.js": {"lines":{"total":58,"covered":37,"skipped":0,"pct":63.79},"functions":{"total":20,"covered":10,"skipped":0,"pct":50},"statements":{"total":59,"covered":37,"skipped":0,"pct":62.71},"branches":{"total":32,"covered":7,"skipped":0,"pct":21.88}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/panels/TopPanel.js": {"lines":{"total":391,"covered":265,"skipped":0,"pct":67.77},"functions":{"total":73,"covered":42,"skipped":0,"pct":57.53},"statements":{"total":411,"covered":273,"skipped":0,"pct":66.42},"branches":{"total":207,"covered":105,"skipped":0,"pct":50.72}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/panels/LeftPanel.js": {"lines":{"total":58,"covered":47,"skipped":0,"pct":81.03},"functions":{"total":20,"covered":15,"skipped":0,"pct":75},"statements":{"total":59,"covered":47,"skipped":0,"pct":79.66},"branches":{"total":32,"covered":12,"skipped":0,"pct":37.5}}
|
||||
,"/Users/jfhenon/Work/svgedit/src/editor/panels/TopPanel.js": {"lines":{"total":391,"covered":296,"skipped":0,"pct":75.7},"functions":{"total":73,"covered":48,"skipped":0,"pct":65.75},"statements":{"total":411,"covered":304,"skipped":0,"pct":73.97},"branches":{"total":207,"covered":127,"skipped":0,"pct":61.35}}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
40
package.json
40
package.json
|
@ -83,11 +83,11 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@svgedit/svgcanvas": "7.2.1",
|
||||
"browser-fs-access": "0.31.1",
|
||||
"core-js": "3.27.1",
|
||||
"browser-fs-access": "0.33.0",
|
||||
"core-js": "3.29.1",
|
||||
"elix": "15.0.1",
|
||||
"html2canvas": "1.4.1",
|
||||
"i18next": "22.4.9",
|
||||
"i18next": "22.4.13",
|
||||
"jspdf": "2.5.1",
|
||||
"pathseg": "1.2.1",
|
||||
"regenerator-runtime": "0.13.11",
|
||||
|
@ -95,45 +95,45 @@
|
|||
"svg2pdf.js": "2.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.20.12",
|
||||
"@babel/core": "7.21.3",
|
||||
"@babel/preset-env": "7.20.2",
|
||||
"@babel/register": "7.18.9",
|
||||
"@babel/runtime-corejs3": "7.20.7",
|
||||
"@cypress/code-coverage": "3.10.0",
|
||||
"@babel/register": "7.21.0",
|
||||
"@babel/runtime-corejs3": "7.21.0",
|
||||
"@cypress/code-coverage": "3.10.1",
|
||||
"@rollup/plugin-babel": "^6.0.3",
|
||||
"@rollup/plugin-commonjs": "^24",
|
||||
"@rollup/plugin-dynamic-import-vars": "2.0.2",
|
||||
"@rollup/plugin-dynamic-import-vars": "2.0.3",
|
||||
"@rollup/plugin-node-resolve": "15.0.1",
|
||||
"@rollup/plugin-replace": "5.0.2",
|
||||
"@rollup/plugin-url": "8.0.1",
|
||||
"@web/dev-server": "0.1.35",
|
||||
"@web/dev-server-esbuild": "^0.3.3",
|
||||
"@web/dev-server-rollup": "0.3.19",
|
||||
"@web/dev-server": "0.1.37",
|
||||
"@web/dev-server-esbuild": "^0.3.5",
|
||||
"@web/dev-server-rollup": "0.4.0",
|
||||
"babel-plugin-istanbul": "^6.1.1",
|
||||
"babel-plugin-transform-object-rest-spread": "7.0.0-beta.3",
|
||||
"core-js-bundle": "3.27.1",
|
||||
"core-js-bundle": "3.29.1",
|
||||
"cp-cli": "2.0.0",
|
||||
"cypress": "12.3.0",
|
||||
"cypress-multi-reporters": "1.6.2",
|
||||
"cypress": "12.9.0",
|
||||
"cypress-multi-reporters": "1.6.3",
|
||||
"jamilih": "0.54.0",
|
||||
"jsdoc": "4.0.0",
|
||||
"jsdoc": "4.0.2",
|
||||
"node-static": "0.7.11",
|
||||
"npm-run-all": "4.1.5",
|
||||
"nyc": "15.1.0",
|
||||
"open-cli": "7.1.0",
|
||||
"open-cli": "7.2.0",
|
||||
"promise-fs": "2.1.1",
|
||||
"qr-manipulation": "0.7.0",
|
||||
"query-result": "1.0.5",
|
||||
"remark-cli": "11.0.0",
|
||||
"remark-lint-ordered-list-marker-value": "3.1.1",
|
||||
"rimraf": "3.0.2",
|
||||
"rollup": "3.9.1",
|
||||
"rimraf": "4.4.1",
|
||||
"rollup": "3.20.2",
|
||||
"rollup-plugin-copy": "3.4.0",
|
||||
"rollup-plugin-filesize": "9.1.2",
|
||||
"rollup-plugin-filesize": "10.0.0",
|
||||
"rollup-plugin-html": "0.2.1",
|
||||
"rollup-plugin-progress": "1.1.2",
|
||||
"rollup-plugin-re": "1.0.7",
|
||||
"standard": "17.0.0",
|
||||
"start-server-and-test": "1.15.2"
|
||||
"start-server-and-test": "2.0.0"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ import {
|
|||
snapToGrid, assignAttributes, getBBox, getRefElem, findDefs
|
||||
} from './utilities.js'
|
||||
import {
|
||||
transformPoint, transformListToTransform, matrixMultiply, transformBox
|
||||
transformPoint, transformListToTransform, matrixMultiply, transformBox, getTransformList
|
||||
} from './math.js'
|
||||
|
||||
// this is how we map paths to our preferred relative segment types
|
||||
|
@ -98,7 +98,7 @@ export const remapElement = (selected, changes, m) => {
|
|||
changes.y = Number.parseFloat(changes.y) + tNew.f
|
||||
} else {
|
||||
// we just absorb all matrices into the element and don't do any remapping
|
||||
const chlist = selected.transform.baseVal
|
||||
const chlist = getTransformList(selected)
|
||||
const mt = svgCanvas.getSvgRoot().createSVGTransform()
|
||||
mt.setMatrix(matrixMultiply(transformListToTransform(chlist).matrix, m))
|
||||
chlist.clear()
|
||||
|
@ -115,7 +115,7 @@ export const remapElement = (selected, changes, m) => {
|
|||
// Allow images to be inverted (give them matrix when flipped)
|
||||
if (elName === 'image' && (m.a < 0 || m.d < 0)) {
|
||||
// Convert to matrix
|
||||
const chlist = selected.transform.baseVal
|
||||
const chlist = getTransformList(selected)
|
||||
const mt = svgCanvas.getSvgRoot().createSVGTransform()
|
||||
mt.setMatrix(matrixMultiply(transformListToTransform(chlist).matrix, m))
|
||||
chlist.clear()
|
||||
|
|
|
@ -12,7 +12,7 @@ import {
|
|||
convertAttrs
|
||||
} from './units.js'
|
||||
import {
|
||||
transformPoint, hasMatrixTransform, getMatrix, snapToAngle
|
||||
transformPoint, hasMatrixTransform, getMatrix, snapToAngle, getTransformList
|
||||
} from './math.js'
|
||||
import * as draw from './draw.js'
|
||||
import * as pathModule from './path.js'
|
||||
|
@ -83,7 +83,7 @@ const getBsplinePoint = (t) => {
|
|||
const updateTransformList = (svgRoot, element, dx, dy) => {
|
||||
const xform = svgRoot.createSVGTransform()
|
||||
xform.setTranslate(dx, dy)
|
||||
const tlist = element.transform?.baseVal
|
||||
const tlist = getTransformList(element)
|
||||
if (tlist.numberOfItems) {
|
||||
const firstItem = tlist.getItem(0)
|
||||
if (firstItem.type === 2) { // SVG_TRANSFORM_TRANSLATE = 2
|
||||
|
@ -221,7 +221,7 @@ const mouseMoveEvent = (evt) => {
|
|||
// we track the resize bounding box and translate/scale the selected element
|
||||
// while the mouse is down, when mouse goes up, we use this to recalculate
|
||||
// the shape's coordinates
|
||||
tlist = selected.transform.baseVal
|
||||
tlist = getTransformList(selected)
|
||||
const hasMatrix = hasMatrixTransform(tlist)
|
||||
box = hasMatrix ? svgCanvas.getInitBbox() : getBBox(selected)
|
||||
let left = box.x
|
||||
|
@ -1026,7 +1026,7 @@ const mouseDownEvent = (evt) => {
|
|||
|
||||
svgCanvas.setStartTransform(mouseTarget.getAttribute('transform'))
|
||||
|
||||
const tlist = mouseTarget.transform.baseVal
|
||||
const tlist = getTransformList(mouseTarget)
|
||||
// consolidate transforms using standard SVG but keep the transformation used for the move/scale
|
||||
if (tlist.numberOfItems > 1) {
|
||||
const firstTransform = tlist.getItem(0)
|
||||
|
@ -1060,7 +1060,7 @@ const mouseDownEvent = (evt) => {
|
|||
// a transform to use for its translate
|
||||
for (const selectedElement of selectedElements) {
|
||||
if (!selectedElement) { continue }
|
||||
const slist = selectedElement.transform?.baseVal
|
||||
const slist = getTransformList(selectedElement)
|
||||
if (slist.numberOfItems) {
|
||||
slist.insertItemBefore(svgRoot.createSVGTransform(), 0)
|
||||
} else {
|
||||
|
|
|
@ -40,6 +40,19 @@ export const transformPoint = function (x, y, m) {
|
|||
return { x: m.a * x + m.c * y + m.e, y: m.b * x + m.d * y + m.f }
|
||||
}
|
||||
|
||||
export const getTransformList = (elem) => {
|
||||
if (elem.transform) {
|
||||
return elem.transform?.baseVal
|
||||
}
|
||||
if (elem.gradientTransform) {
|
||||
return elem.gradientTransform?.baseVal
|
||||
}
|
||||
if (elem.patternTransform) {
|
||||
return elem.patternTransform?.baseVal
|
||||
}
|
||||
console.warn('no transform list found - check browser version', elem)
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to check if the matrix performs no actual transform
|
||||
* (i.e. exists for identity purposes).
|
||||
|
@ -48,7 +61,9 @@ export const transformPoint = function (x, y, m) {
|
|||
* @returns {boolean} Indicates whether or not the matrix is 1,0,0,1,0,0
|
||||
*/
|
||||
export const isIdentity = function (m) {
|
||||
return (m.a === 1 && m.b === 0 && m.c === 0 && m.d === 1 && m.e === 0 && m.f === 0)
|
||||
return (
|
||||
m.a === 1 && m.b === 0 && m.c === 0 && m.d === 1 && m.e === 0 && m.f === 0
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -63,12 +78,24 @@ export const matrixMultiply = function (...args) {
|
|||
return m1.multiply(prev)
|
||||
})
|
||||
|
||||
if (Math.abs(m.a) < NEAR_ZERO) { m.a = 0 }
|
||||
if (Math.abs(m.b) < NEAR_ZERO) { m.b = 0 }
|
||||
if (Math.abs(m.c) < NEAR_ZERO) { m.c = 0 }
|
||||
if (Math.abs(m.d) < NEAR_ZERO) { m.d = 0 }
|
||||
if (Math.abs(m.e) < NEAR_ZERO) { m.e = 0 }
|
||||
if (Math.abs(m.f) < NEAR_ZERO) { m.f = 0 }
|
||||
if (Math.abs(m.a) < NEAR_ZERO) {
|
||||
m.a = 0
|
||||
}
|
||||
if (Math.abs(m.b) < NEAR_ZERO) {
|
||||
m.b = 0
|
||||
}
|
||||
if (Math.abs(m.c) < NEAR_ZERO) {
|
||||
m.c = 0
|
||||
}
|
||||
if (Math.abs(m.d) < NEAR_ZERO) {
|
||||
m.d = 0
|
||||
}
|
||||
if (Math.abs(m.e) < NEAR_ZERO) {
|
||||
m.e = 0
|
||||
}
|
||||
if (Math.abs(m.f) < NEAR_ZERO) {
|
||||
m.f = 0
|
||||
}
|
||||
|
||||
return m
|
||||
}
|
||||
|
@ -80,11 +107,15 @@ export const matrixMultiply = function (...args) {
|
|||
* @returns {boolean} Whether or not a matrix transform was found
|
||||
*/
|
||||
export const hasMatrixTransform = function (tlist) {
|
||||
if (!tlist) { return false }
|
||||
if (!tlist) {
|
||||
return false
|
||||
}
|
||||
let num = tlist.numberOfItems
|
||||
while (num--) {
|
||||
const xform = tlist.getItem(num)
|
||||
if (xform.type === 1 && !isIdentity(xform.matrix)) { return true }
|
||||
if (xform.type === 1 && !isIdentity(xform.matrix)) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
@ -114,9 +145,9 @@ export const hasMatrixTransform = function (tlist) {
|
|||
*/
|
||||
export const transformBox = function (l, t, w, h, m) {
|
||||
const tl = transformPoint(l, t, m)
|
||||
const tr = transformPoint((l + w), t, m)
|
||||
const bl = transformPoint(l, (t + h), m)
|
||||
const br = transformPoint((l + w), (t + h), m)
|
||||
const tr = transformPoint(l + w, t, m)
|
||||
const bl = transformPoint(l, t + h, m)
|
||||
const br = transformPoint(l + w, t + h, m)
|
||||
|
||||
const minx = Math.min(tl.x, tr.x, bl.x, br.x)
|
||||
const maxx = Math.max(tl.x, tr.x, bl.x, br.x)
|
||||
|
@ -131,8 +162,8 @@ export const transformBox = function (l, t, w, h, m) {
|
|||
aabox: {
|
||||
x: minx,
|
||||
y: miny,
|
||||
width: (maxx - minx),
|
||||
height: (maxy - miny)
|
||||
width: maxx - minx,
|
||||
height: maxy - miny
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -155,16 +186,21 @@ export const transformListToTransform = function (tlist, min, max) {
|
|||
return svg.createSVGTransformFromMatrix(svg.createSVGMatrix())
|
||||
}
|
||||
min = min || 0
|
||||
max = max || (tlist.numberOfItems - 1)
|
||||
max = max || tlist.numberOfItems - 1
|
||||
min = Number.parseInt(min)
|
||||
max = Number.parseInt(max)
|
||||
if (min > max) { const temp = max; max = min; min = temp }
|
||||
if (min > max) {
|
||||
const temp = max
|
||||
max = min
|
||||
min = temp
|
||||
}
|
||||
let m = svg.createSVGMatrix()
|
||||
for (let i = min; i <= max; ++i) {
|
||||
// if our indices are out of range, just use a harmless identity matrix
|
||||
const mtom = (i >= 0 && i < tlist.numberOfItems
|
||||
const mtom =
|
||||
i >= 0 && i < tlist.numberOfItems
|
||||
? tlist.getItem(i).matrix
|
||||
: svg.createSVGMatrix())
|
||||
: svg.createSVGMatrix()
|
||||
m = matrixMultiply(m, mtom)
|
||||
}
|
||||
return svg.createSVGTransformFromMatrix(m)
|
||||
|
@ -177,7 +213,7 @@ export const transformListToTransform = function (tlist, min, max) {
|
|||
* @returns {SVGMatrix} The matrix object associated with the element's transformlist
|
||||
*/
|
||||
export const getMatrix = (elem) => {
|
||||
const tlist = elem.transform.baseVal
|
||||
const tlist = getTransformList(elem)
|
||||
return transformListToTransform(tlist).matrix
|
||||
}
|
||||
|
||||
|
@ -214,8 +250,10 @@ export const snapToAngle = (x1, y1, x2, y2) => {
|
|||
* @returns {boolean} True if rectangles intersect
|
||||
*/
|
||||
export const rectsIntersect = (r1, r2) => {
|
||||
return r2.x < (r1.x + r1.width) &&
|
||||
(r2.x + r2.width) > r1.x &&
|
||||
r2.y < (r1.y + r1.height) &&
|
||||
(r2.y + r2.height) > r1.y
|
||||
return (
|
||||
r2.x < r1.x + r1.width &&
|
||||
r2.x + r2.width > r1.x &&
|
||||
r2.y < r1.y + r1.height &&
|
||||
r2.y + r2.height > r1.y
|
||||
)
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ import { shortFloat } from './units.js'
|
|||
import { ChangeElementCommand, BatchCommand } from './history.js'
|
||||
import {
|
||||
transformPoint, snapToAngle, rectsIntersect,
|
||||
transformListToTransform
|
||||
transformListToTransform, getTransformList
|
||||
} from './math.js'
|
||||
import {
|
||||
assignAttributes, getElement, getRotationAngle, snapToGrid,
|
||||
|
@ -876,7 +876,7 @@ export const pathActionsMethod = (function () {
|
|||
*/
|
||||
resetOrientation (pth) {
|
||||
if (pth?.nodeName !== 'path') { return false }
|
||||
const tlist = pth.transform.baseVal
|
||||
const tlist = getTransformList(pth)
|
||||
const m = transformListToTransform(tlist).matrix
|
||||
tlist.clear()
|
||||
pth.removeAttribute('transform')
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
*/
|
||||
|
||||
import { shortFloat } from './units.js'
|
||||
import { transformPoint } from './math.js'
|
||||
import { transformPoint, getTransformList } from './math.js'
|
||||
import {
|
||||
getRotationAngle, getBBox,
|
||||
getRefElem, findDefs,
|
||||
|
@ -511,7 +511,7 @@ export const recalcRotatedPath = () => {
|
|||
|
||||
// now we must set the new transform to be rotated around the new center
|
||||
const Rnc = svgCanvas.getSvgRoot().createSVGTransform()
|
||||
const tlist = currentPath.transform.baseVal
|
||||
const tlist = getTransformList(currentPath)
|
||||
Rnc.setRotate((angle * 180.0 / Math.PI), newcx, newcy)
|
||||
tlist.replaceItem(Rnc, 0)
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ import { BatchCommand, ChangeElementCommand } from './history.js'
|
|||
import { remapElement } from './coords.js'
|
||||
import {
|
||||
isIdentity, matrixMultiply, transformPoint, transformListToTransform,
|
||||
hasMatrixTransform
|
||||
hasMatrixTransform, getTransformList
|
||||
} from './math.js'
|
||||
import {
|
||||
mergeDeep
|
||||
|
@ -55,7 +55,7 @@ export const init = (canvas) => {
|
|||
*/
|
||||
export const updateClipPath = (attr, tx, ty) => {
|
||||
const path = getRefElem(attr).firstChild
|
||||
const cpXform = path.transform.baseVal
|
||||
const cpXform = getTransformList(path)
|
||||
const newxlate = svgCanvas.getSvgRoot().createSVGTransform()
|
||||
newxlate.setTranslate(tx, ty)
|
||||
|
||||
|
@ -75,7 +75,7 @@ export const recalculateDimensions = (selected) => {
|
|||
if (!selected) return null
|
||||
const svgroot = svgCanvas.getSvgRoot()
|
||||
const dataStorage = svgCanvas.getDataStorage()
|
||||
const tlist = selected.transform?.baseVal
|
||||
const tlist = getTransformList(selected)
|
||||
// remove any unnecessary transforms
|
||||
if (tlist?.numberOfItems > 0) {
|
||||
let k = tlist.numberOfItems
|
||||
|
@ -113,7 +113,6 @@ export const recalculateDimensions = (selected) => {
|
|||
selected.setAttribute('transform', '')
|
||||
// However, this still next line currently doesn't work at all in Chrome
|
||||
selected.removeAttribute('transform')
|
||||
// selected.transform.baseVal.clear(); // Didn't help for Chrome bug
|
||||
return null
|
||||
}
|
||||
|
||||
|
@ -296,7 +295,7 @@ export const recalculateDimensions = (selected) => {
|
|||
tx = 0
|
||||
ty = 0
|
||||
if (child.nodeType === 1) {
|
||||
const childTlist = child.transform.baseVal
|
||||
const childTlist = getTransformList(child)
|
||||
|
||||
// some children might not have a transform (<metadata>, <defs>, etc)
|
||||
if (!childTlist) { continue }
|
||||
|
@ -413,7 +412,7 @@ export const recalculateDimensions = (selected) => {
|
|||
oldStartTransform = svgCanvas.getStartTransform()
|
||||
svgCanvas.setStartTransform(child.getAttribute('transform'))
|
||||
|
||||
const childTlist = child.transform?.baseVal
|
||||
const childTlist = getTransformList(child)
|
||||
// some children might not have a transform (<metadata>, <defs>, etc)
|
||||
if (childTlist) {
|
||||
const newxlate = svgroot.createSVGTransform()
|
||||
|
@ -460,7 +459,7 @@ export const recalculateDimensions = (selected) => {
|
|||
if (child.nodeType === 1) {
|
||||
oldStartTransform = svgCanvas.getStartTransform()
|
||||
svgCanvas.setStartTransform(child.getAttribute('transform'))
|
||||
const childTlist = child.transform?.baseVal
|
||||
const childTlist = getTransformList(child)
|
||||
|
||||
if (!childTlist) { continue }
|
||||
|
||||
|
@ -544,7 +543,7 @@ export const recalculateDimensions = (selected) => {
|
|||
if (child.nodeType === 1) {
|
||||
oldStartTransform = svgCanvas.getStartTransform()
|
||||
svgCanvas.setStartTransform(child.getAttribute('transform'))
|
||||
const childTlist = child.transform?.baseVal
|
||||
const childTlist = getTransformList(child)
|
||||
const newxlate = svgroot.createSVGTransform()
|
||||
newxlate.setTranslate(tx, ty)
|
||||
if (childTlist.numberOfItems) {
|
||||
|
@ -629,7 +628,7 @@ export const recalculateDimensions = (selected) => {
|
|||
if (attrVal === 'userSpaceOnUse') {
|
||||
// Update the userSpaceOnUse element
|
||||
m = transformListToTransform(tlist).matrix
|
||||
const gtlist = paint.transform.baseVal
|
||||
const gtlist = getTransformList(paint)
|
||||
const gmatrix = transformListToTransform(gtlist).matrix
|
||||
m = matrixMultiply(m, gmatrix)
|
||||
const mStr = 'matrix(' + [m.a, m.b, m.c, m.d, m.e, m.f].join(',') + ')'
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
import { isWebkit } from '../common/browser.js'
|
||||
import { getRotationAngle, getBBox, getStrokedBBox } from './utilities.js'
|
||||
import { transformListToTransform, transformBox, transformPoint, matrixMultiply } from './math.js'
|
||||
import { transformListToTransform, transformBox, transformPoint, matrixMultiply, getTransformList } from './math.js'
|
||||
import { NS } from './namespaces'
|
||||
|
||||
let svgCanvas
|
||||
|
@ -130,14 +130,14 @@ export class Selector {
|
|||
while (currentElt.parentNode) {
|
||||
if (currentElt.parentNode && currentElt.parentNode.tagName === 'g' && currentElt.parentNode.transform) {
|
||||
if (currentElt.parentNode.transform.baseVal.numberOfItems) {
|
||||
parentTransformationMatrix = matrixMultiply(transformListToTransform(selected.parentNode.transform.baseVal).matrix, parentTransformationMatrix)
|
||||
parentTransformationMatrix = matrixMultiply(transformListToTransform(getTransformList(selected.parentNode)).matrix, parentTransformationMatrix)
|
||||
}
|
||||
}
|
||||
currentElt = currentElt.parentNode
|
||||
}
|
||||
|
||||
// loop and transform our bounding box until we reach our first rotation
|
||||
const tlist = selected.transform.baseVal
|
||||
const tlist = getTransformList(selected)
|
||||
|
||||
// combines the parent transformation with that of the selected element if necessary
|
||||
const m = parentTransformationMatrix ? matrixMultiply(parentTransformationMatrix, transformListToTransform(tlist).matrix) : transformListToTransform(tlist).matrix
|
||||
|
|
|
@ -26,7 +26,8 @@ import {
|
|||
import {
|
||||
transformPoint,
|
||||
matrixMultiply,
|
||||
transformListToTransform
|
||||
transformListToTransform,
|
||||
getTransformList
|
||||
} from './math.js'
|
||||
import { recalculateDimensions } from './recalculate.js'
|
||||
import { isGecko } from '../common/browser.js'
|
||||
|
@ -207,7 +208,7 @@ const moveSelectedElements = (dx, dy, undoable = true) => {
|
|||
selectedElements.forEach((selected, i) => {
|
||||
if (selected) {
|
||||
const xform = svgCanvas.getSvgRoot().createSVGTransform()
|
||||
const tlist = selected.transform?.baseVal
|
||||
const tlist = getTransformList(selected)
|
||||
|
||||
// dx and dy could be arrays
|
||||
if (Array.isArray(dx)) {
|
||||
|
@ -724,7 +725,7 @@ const pushGroupProperty = (g, undoable) => {
|
|||
const len = children.length
|
||||
const xform = g.getAttribute('transform')
|
||||
|
||||
const glist = g.transform.baseVal
|
||||
const glist = getTransformList(g)
|
||||
const m = transformListToTransform(glist).matrix
|
||||
|
||||
const batchCmd = new BatchCommand('Push group properties')
|
||||
|
@ -810,7 +811,7 @@ const pushGroupProperty = (g, undoable) => {
|
|||
}
|
||||
}
|
||||
|
||||
let chtlist = elem.transform?.baseVal
|
||||
let chtlist = getTransformList(elem)
|
||||
|
||||
// Don't process gradient transforms
|
||||
if (elem.tagName.includes('Gradient')) {
|
||||
|
@ -963,7 +964,7 @@ const convertToGroup = elem => {
|
|||
}
|
||||
dataStorage.remove(elem, 'gsvg')
|
||||
|
||||
const tlist = elem.transform.baseVal
|
||||
const tlist = getTransformList(elem)
|
||||
const xform = svgCanvas.getSvgRoot().createSVGTransform()
|
||||
xform.setTranslate(pt.x, pt.y)
|
||||
tlist.appendItem(xform)
|
||||
|
|
|
@ -13,7 +13,8 @@ import {
|
|||
import {
|
||||
transformPoint,
|
||||
transformListToTransform,
|
||||
rectsIntersect
|
||||
rectsIntersect,
|
||||
getTransformList
|
||||
} from './math.js'
|
||||
import * as hstry from './history.js'
|
||||
import { getClosest } from '../common/util.js'
|
||||
|
@ -392,7 +393,7 @@ const setRotationAngle = (val, preventUndo) => {
|
|||
const bbox = getBBox(elem)
|
||||
const cx = bbox.x + bbox.width / 2
|
||||
const cy = bbox.y + bbox.height / 2
|
||||
const tlist = elem.transform.baseVal
|
||||
const tlist = getTransformList(elem)
|
||||
|
||||
// only remove the real rotational transform if present (i.e. at index=0)
|
||||
if (tlist.numberOfItems > 0) {
|
||||
|
|
|
@ -23,7 +23,7 @@ import {
|
|||
getBBox as utilsGetBBox,
|
||||
hashCode
|
||||
} from './utilities.js'
|
||||
import { transformPoint, transformListToTransform } from './math.js'
|
||||
import { transformPoint, transformListToTransform, getTransformList } from './math.js'
|
||||
import { convertUnit, shortFloat, convertToNum } from './units.js'
|
||||
import { isGecko, isChrome, isWebkit } from '../common/browser.js'
|
||||
import * as pathModule from './path.js'
|
||||
|
@ -1269,7 +1269,7 @@ const convertGradientsMethod = (elem) => {
|
|||
}
|
||||
|
||||
// If has transform, convert
|
||||
const tlist = grad.gradientTransform.baseVal
|
||||
const tlist = getTransformList(grad)
|
||||
if (tlist?.numberOfItems > 0) {
|
||||
const m = transformListToTransform(tlist).matrix
|
||||
const pt1 = transformPoint(gCoords.x1, gCoords.y1, m)
|
||||
|
|
|
@ -13,7 +13,7 @@ import {
|
|||
isGecko
|
||||
} from '../common/browser.js'
|
||||
import {
|
||||
transformPoint, transformListToTransform
|
||||
transformPoint, transformListToTransform, getTransformList
|
||||
} from './math.js'
|
||||
|
||||
const {
|
||||
|
@ -228,7 +228,7 @@ export const changeSelectedAttributeNoUndoMethod = (attr, newValue, elems) => {
|
|||
// we need to update the rotational transform attribute
|
||||
const angle = getRotationAngle(elem)
|
||||
if (angle !== 0 && attr !== 'transform') {
|
||||
const tlist = elem.transform?.baseVal
|
||||
const tlist = getTransformList(elem)
|
||||
let n = tlist.numberOfItems
|
||||
while (n--) {
|
||||
const xform = tlist.getItem(n)
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
import { NS } from './namespaces.js'
|
||||
import { setUnitAttr, getTypeMap } from './units.js'
|
||||
import {
|
||||
hasMatrixTransform, transformListToTransform, transformBox
|
||||
hasMatrixTransform, transformListToTransform, transformBox, getTransformList
|
||||
} from './math.js'
|
||||
import { getClosest, mergeDeep } from '../common/util.js'
|
||||
|
||||
|
@ -770,7 +770,7 @@ export const convertToPath = (elem, attrs, svgCanvas) => {
|
|||
|
||||
// Reorient if it has a matrix
|
||||
if (eltrans) {
|
||||
const tlist = path.transform.baseVal
|
||||
const tlist = getTransformList(path)
|
||||
if (hasMatrixTransform(tlist)) {
|
||||
svgCanvas.pathActions.resetOrientation(path)
|
||||
}
|
||||
|
@ -841,7 +841,7 @@ export const getBBoxWithTransform = function (elem, addSVGElementsFromJson, path
|
|||
return null
|
||||
}
|
||||
|
||||
const tlist = elem.transform.baseVal
|
||||
const tlist = getTransformList(elem)
|
||||
const angle = getRotationAngleFromTransformList(tlist)
|
||||
const hasMatrixXForm = hasMatrixTransform(tlist)
|
||||
|
||||
|
@ -1029,7 +1029,7 @@ export const getRotationAngleFromTransformList = (tlist, toRad) => {
|
|||
export let getRotationAngle = (elem, toRad) => {
|
||||
const selected = elem || svgCanvas.getSelectedElements()[0]
|
||||
// find the rotation transform (if any) and set it
|
||||
const tlist = selected.transform?.baseVal
|
||||
const tlist = getTransformList(selected)
|
||||
return getRotationAngleFromTransformList(tlist, toRad)
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,8 @@ import commonjs from '@rollup/plugin-commonjs'
|
|||
import filesize from 'rollup-plugin-filesize'
|
||||
|
||||
// remove existing distribution
|
||||
rimraf('./dist', () => console.info('recreating dist'))
|
||||
await rimraf('./dist')
|
||||
console.info('recreating dist')
|
||||
|
||||
// config for svgedit core module
|
||||
const config = [{
|
||||
|
|
|
@ -30,7 +30,8 @@ const extensionDirs = getDirectories('src/editor/extensions')
|
|||
const dest = ['dist/editor']
|
||||
|
||||
// remove existing distribution
|
||||
rimraf('./dist', () => console.info('recreating dist'))
|
||||
await rimraf('./dist')
|
||||
console.info('recreating dist')
|
||||
|
||||
// config for svgedit core module
|
||||
const config = [{
|
||||
|
|
Loading…
Reference in New Issue