- Fix (jgraduate->jpicker): Actually fix issue with color val check when no other proper results (equal to "all");

prior fix had not covered original intention
- Docs: Clean-up and fixes in CHANGES
master
Brett Zamir 2018-10-22 23:13:04 +08:00
parent 052a2c4571
commit 2cecbac24a
10 changed files with 271 additions and 152 deletions

View File

@ -1,6 +1,13 @@
# ?
- Fix (jgraduate->jpicker): Actually fix issue with color val check when no
other proper results (equal to "all"); prior fix had not covered
original intention
# 3.0.0 # 3.0.0
- See pre-release version notes for other changes that occurred with 3.0.0 - See pre-release version notes below for other changes that are a part
of 3.0.0
- Breaking change: For checkbox for persisting choice of initial use storage - Breaking change: For checkbox for persisting choice of initial use storage
approval in storage extension dialog, turn on by default for convenience of approval in storage extension dialog, turn on by default for convenience of
most users (must still hit "ok" and users can still turn off the checkbox) most users (must still hit "ok" and users can still turn off the checkbox)
@ -341,7 +348,7 @@
- Fix regression: Avoid abandoning stylesheet loading if one load fails - Fix regression: Avoid abandoning stylesheet loading if one load fails
- Fix (ext-connector): Handle case of 2 connecting elements with - Fix (ext-connector): Handle case of 2 connecting elements with
same y-coordinate (fixes #210 ; thanks, @iuyiuy!) same y-coordinate (fixes #210 ; thanks, @iuyiuy!)
- Enhancement: Delete the imge upon cancel if it is a new image (fixes #177) - Enhancement: Delete the image upon cancel if it is a new image (fixes #177)
- Enhancement: Allow `addSvgElementFromJson` to accept non-SVG namespaces - Enhancement: Allow `addSvgElementFromJson` to accept non-SVG namespaces
with explicit `namespace` property as well as the default SVG namespace with explicit `namespace` property as well as the default SVG namespace
(fixes #155); document (fixes #155); document
@ -354,29 +361,35 @@
- Licensing: Indicate MIT is license type of rgbcolor and rename - Licensing: Indicate MIT is license type of rgbcolor and rename
file to reflect it; rename/add license file name for jgraduate file to reflect it; rename/add license file name for jgraduate
and screencast to reflect type (Apache 2.0) and screencast to reflect type (Apache 2.0);
contains license information (of type MIT) for Raphael icons contains license information (of type MIT) for Raphael icons
- Breaking change: Rename config file to `svgedit-config-iife.js` (or - Breaking change: Rename config file to `svgedit-config-iife.js` (or
for the module version, `svgedit-config-es.js`); also expect for the module version, `svgedit-config-es.js`); also expect
one directory higher; incorporates #207 (@iuyiuy) one directory higher; incorporates #207 (@iuyiuy)
- Breaking change: Separate `extIconsPath` from `extPath` (not copying over icons) - Breaking change: Separate `extIconsPath` from `extPath` (not copying
over icons)
- Breaking change: Don't reference `custom.css` in HTML; can instead - Breaking change: Don't reference `custom.css` in HTML; can instead
be referenced in JavaScript through the config file (provided in `svgedit-config-sample-iife.js`/`svgedit-config-sample-es.js` as be referenced in JavaScript through the config file (provided in `svgedit-config-sample-iife.js`/`svgedit-config-sample-es.js` as
`svgedit-custom.css` for better namespacing); incorporates #207 (@iuyiuy) `svgedit-custom.css` for better namespacing); incorporates #207 (@iuyiuy)
- Breaking change: Remove minified jgraduate/spinbtn files (minified within Rollup routine) - Breaking change: Remove minified jgraduate/spinbtn files (minified within
- Breaking change: Require `new` with `EmbeddedSVGEdit` (allows us to use `class` internally) Rollup routine)
- Breaking change: Require `new` with `EmbeddedSVGEdit` (allows us to use
`class` internally)
- Breaking change: `svgcanvas.setUiStrings` must now be called if not using - Breaking change: `svgcanvas.setUiStrings` must now be called if not using
editor in order to get strings (for sake of i18n) (and if using path.js editor in order to get strings (for sake of i18n) (and if using path.js
alone, must also have its `setUiStrings` called) alone, must also have its `setUiStrings` called)
- Breaking change (ext-overview-window): Avoid global `overviewWindowGlobals` - Breaking change (ext-overview-window): Avoid global `overviewWindowGlobals`
- Breaking change (ext-imagelib): Change to object-based encoding for namespacing of - Breaking change (ext-imagelib): Change to object-based encoding for
messages (though keep stringifying/parsing ourselves until we remove IE9 support) namespacing of messages (though keep stringifying/parsing ourselves until
we remove IE9 support)
- Breaking change: Rename `jquery.js` to `jquery.min.js` - Breaking change: Rename `jquery.js` to `jquery.min.js`
- Breaking change: Remove `scoped` attribute from `style`; it is now deprecated and - Breaking change: Remove `scoped` attribute from `style`; it is now
obsolete; also move to head (after other stylesheets) deprecated and obsolete; also move to head (after other stylesheets)
- Breaking change: Avoid zoom unless shift key pressed
- Fix: i18nize path.js strings and canvas notifications - Fix: i18nize path.js strings and canvas notifications
- Fix: Attempt i18n for ext-markers - Fix: Attempt i18n for ext-markers
- Fix: Zoom when scrolled; incorporates #169 (@AndrolGenhald), adapting for conventions; also allow avoidance when shift key pressed - Fix: Zoom centered on cursor when scrolled; incorporates
#169 (@AndrolGenhald), adapting for conventions
- Fix: Update Atom feed reference in HTML - Fix: Update Atom feed reference in HTML
- Fix: Broken "lv" locale (and inconsistent tabs/spaces pt-PR) - Fix: Broken "lv" locale (and inconsistent tabs/spaces pt-PR)
- Fix: Inadvertent global assignments (uncovered by ESLint): - Fix: Inadvertent global assignments (uncovered by ESLint):
@ -392,10 +405,9 @@ obsolete; also move to head (after other stylesheets)
`holder` was declared in too nested of a scope `holder` was declared in too nested of a scope
* Fix: Avoid `drawnPath` not defined error (currently adds as a global, but * Fix: Avoid `drawnPath` not defined error (currently adds as a global, but
should be switching to modules anyways) should be switching to modules anyways)
- Fix (jgraduate->jpicker): Fix Color val check when `name.length` is empty
(equal to "all")
- Fix (jquery.jgraduate.js): Ensure `numstops` is present before check - Fix (jquery.jgraduate.js): Ensure `numstops` is present before check
- Fix (history.js) Relocation of rotational transform had undeclared variable (`elem`) - Fix (history.js) Relocation of rotational transform had undeclared
variable (`elem`)
- Fix (Editor): Restore save alert - Fix (Editor): Restore save alert
- Fix (Firefox svgutils.js): tspan (and textPath apparently) have no `getBBox` - Fix (Firefox svgutils.js): tspan (and textPath apparently) have no `getBBox`
in Firefox, so recover (fixes FF issue with recalculate test 3: in Firefox, so recover (fixes FF issue with recalculate test 3:
@ -409,18 +421,16 @@ obsolete; also move to head (after other stylesheets)
- Fix (HTML): Update assorted links, including using `https://` - Fix (HTML): Update assorted links, including using `https://`
- Enhancement: ES6 modules (including jQuery plugins, extensions, locales, - Enhancement: ES6 modules (including jQuery plugins, extensions, locales,
tests), along with Babel; make Node build routine for converting modular tests), along with Babel; make Node build routine for converting modular
source to non-modular HTML source to non-modular
- Enhancement: use `loadStylesheets` for modular stylesheet defining - Enhancement: use `loadStylesheets` for modular stylesheet defining
(but parallel loading) (but parallel loading)
- Enhancement: Add `stylesheets` config for modular but parallel - Enhancement: Add `stylesheets` config for modular but parallel
stylesheet loading with `@default` option for simple stylesheet loading with `@default` option for simple
inclusion/exclusion of defaults (if not going with default). inclusion/exclusion of defaults (if not going with default).
- Enhancement: Further JSDoc (incomplete)
- Enhancement (Project size): Remove now unused Python l10n scripts (#238) - Enhancement (Project size): Remove now unused Python l10n scripts (#238)
- Enhancement (Optimization): Compress images using imageoptim (and add - Enhancement (Optimization): Compress images using imageoptim (and add
npm script) (per #215) npm script) (per #215)
- Enhancement (Editor): Use `https` (instead of `http`) for link default - Enhancement (Editor): Use `https` (instead of `http`) for link placeholder
- Enhancement: Throw Error objects instead of strings (including in jgraduate->jpicker)
- Enhancement: Make SpinButton plugin independent of SVGEdit via - Enhancement: Make SpinButton plugin independent of SVGEdit via
generic state object for `tool_scale` generic state object for `tool_scale`
- Enhancement: Move `config-sample.js` out of `editor` directory - Enhancement: Move `config-sample.js` out of `editor` directory
@ -436,80 +446,94 @@ npm script) (per #215)
- Linting: 2 spaces, remove BOM, remove carriage returns, bad characters - Linting: 2 spaces, remove BOM, remove carriage returns, bad characters
in Persian locale file in Persian locale file
- Linting (ESLint): Numerous changes - Linting (ESLint): Numerous changes
- Refactoring: Throw Error objects instead of strings (including in
jgraduate->jpicker)
- Refactoring: Switch to ESLint in source - Refactoring: Switch to ESLint in source
- Refactoring: Move scripts to own files - Refactoring: Move scripts to own files
- Refactoring: Clean up `svg-editor.html`: consistent indents; avoid extra lbs, avoid long lines - Refactoring: Clean up `svg-editor.html`: consistent indents; avoid extra
lbs, avoid long lines
- Refactoring: Avoid embedded API adding inline JavaScript listener - Refactoring: Avoid embedded API adding inline JavaScript listener
- Refactoring: Move layers and context code to `draw.js` - Refactoring: Move layers and context code to `draw.js`
- Refactoring: Move `pathActions` from `svgcanvas.js` (though preserve aliases to these methods on `canvas`) and `convertPath` from `svgutils.js` to `path.js` - Refactoring: Move `pathActions` from `svgcanvas.js` (though preserve
- Refactoring: Move `getStrokedBBox` from `svgcanvas.js` (while keeping an alias) to `svgutils.js` (as `getStrokedBBoxDefaultVisible` to avoid conflict with existing) aliases to these methods on `canvas`) and `convertPath` from
- Refactoring/Linting: Enfore `no-extra-semi` and `quote-props` rules `svgutils.js` to `path.js`
- Refactoring: Move `getStrokedBBox` from `svgcanvas.js` (while keeping
an alias) to `svgutils.js` (as `getStrokedBBoxDefaultVisible` to avoid
conflict with existing)
- Refactoring/Linting: Enforce `no-extra-semi` and `quote-props` rules
- Refactoring: Further avoidance of quotes on properties (as possible) - Refactoring: Further avoidance of quotes on properties (as possible)
- Refactoring: Use `class` in place of functions where intended as classes - Refactoring: Use `class` in place of functions where intended as classes
- Refactoring: Consistency and granularity in extensions imports - Refactoring: Consistency and granularity in extensions imports
- Refactoring (ext-storage): Move locale info to own file imported by the extension (toward modularity; still should be split into separate files by language and *dynamically* imported, but we'll wait for better `import` support to refactor this)
- Refactoring: For imagelib, add local jQuery copy (using old 1.4.4 as had
been using from server)
- Refactoring: For MathJax, add local copy (using old 2.3 as had been using from
server); server had not been working
- Refactoring: Remove `use strict` (implicit in modules) - Refactoring: Remove `use strict` (implicit in modules)
- Refactoring: Remove trailing whitespace, fix some code within comments - Refactoring: Remove trailing whitespace, fix some code within comments
- Refactoring: Expect `jQuery` global rather than `$` for better modularity - Refactoring: Expect `jQuery` global rather than `$` for better modularity
(also to adapt line later once available via `import`) (also to adapt line later once available via `import`)
- Refactoring: Prefer `const` (and then `let`) - Refactoring: Prefer `const` (and then `let`)
- Refactoring: Add block scope keywords closer to first block in which they appear - Refactoring: Add block scope keywords closer to first block in which
they appear
- Refactoring: Use ES6 `class` - Refactoring: Use ES6 `class`
- Refactoring `$.isArray` -> `Array.isArray` and avoid some other jQuery core methods - Refactoring `$.isArray` -> `Array.isArray` and avoid some other jQuery
with simple VanillaJS replacements core methods with simple VanillaJS replacements
- Refactoring: Use abbreviated object property syntax - Refactoring: Use abbreviated object property syntax
- Refactoring: Object destructuring - Refactoring: Object destructuring
- Refactoring: Remove `uiStrings` contents in svg-editor.js (obtains from locale) - Refactoring: Remove `uiStrings` contents in svg-editor.js (obtains
from locale)
- Refactoring: Add favicon to embedded API file - Refactoring: Add favicon to embedded API file
- Refactoring: Use arrow functions for brief functions (incomplete) - Refactoring: Use arrow functions for brief functions (incomplete)
- Refactoring: Use `Array.prototype.includes`/`String.prototype.includes`; - Refactoring: Use `Array.prototype.includes`/`String.prototype.includes`;
`String.prototype.startsWith`, `String.prototype.trim` `String.prototype.startsWith`, `String.prototype.trim`
- Refactoring: Remove now unnecessary svgutils do/while resetting of variables - Refactoring: Remove now unnecessary svgutils do/while resetting
of variables
- Refactoring: Use shorthand methods for object literals (avoid ": function") - Refactoring: Use shorthand methods for object literals (avoid ": function")
- Refactoring: Avoid quoting object property keys where unnecessary - Refactoring: Avoid quoting object property keys where unnecessary
- Refactoring: Just do truthy/falsey check for lengths in place of comparison to 0 - Refactoring: Just do truthy/falsey check for lengths in place of
comparison to 0
- Refactoring: Make jpicker variable declaration indent bearable
- Refactoring (ext-storage): Move locale info to own file imported by the
extension (toward modularity; still should be split into separate files
by language and *dynamically* imported, but we'll wait for better
`import` support to refactor this)
- Refactoring (imagelib): Add local jQuery copy (using old 1.4.4 as had
been using from server)
- Refactoring (MathJax): Add local copy (using old 2.3 as had been using from
server); server had not been working
- Refactoring (Testing): Avoid jQuery usage within most test files (defer script, - Refactoring (Testing): Avoid jQuery usage within most test files (defer script,
also in preparation for future switch to ES6 modules for tests) also in preparation for future switch to ES6 modules for tests)
- Refactoring: Make jpicker variable declaration indent bearable
- Refactoring (Linting): Finish svgcanvas.js - Refactoring (Linting): Finish svgcanvas.js
- Docs: Mention in comment no longer an entry file as before - Docs: Mention in comment no longer an entry file as before
- Docs: Migrate old config, extensions, and FAQ docs - Docs: Migrate old config, extensions, and FAQ docs
- Build: Update minified version of spinbtn/jgraduate/jpicker per linted/improved files - Docs: Further JSDoc (incomplete)
- Build: Update minified version of spinbtn/jgraduate/jpicker per
linted/improved files
- Testing: Move JavaScript out of HTML to own files - Testing: Move JavaScript out of HTML to own files
- Testing: Add `node-static` to get tests working - Testing: Fix timing of `all_tests.html` for ensuring expanding iframe
- Testing: Fix timing of `all_tests.html` for ensuring expanding iframe size to fit content size to fit content
- Testing: Add favicon to test files (also may avoid extra log in console) - Testing: Add favicon to test files (also may avoid extra log in console)
- Testing: Update QUnit to 2.6.1 (node_modules) and Sinon to 5.0.8 (and add sinon-test at 2.1.3) and enforce eslint-plugin-qunit linting rules; update custom extensions - Testing: Update QUnit to 2.6.1 (node_modules) and Sinon to 5.0.8 (and
- Testing: Add node-static for automating (and accessing out-of-directory contents) add sinon-test at 2.1.3) and enforce eslint-plugin-qunit linting rules;
update custom extensions
- Testing: Add `node-static` for automating (and accessing out-of-directory
contents)
- Testing: Avoid HTML attributes for styling - Testing: Avoid HTML attributes for styling
- Testing: Add npm `test` script - Testing: Add npm `test` script
- Testing: Comment out unused jQuery SVG test - Testing: Comment out unused jQuery SVG test
- Testing: Add test1 and svgutils_performance_test to all tests page - Testing: Add test1 and svgutils_performance_test to all tests page
- Testing: Due apparently to Path having not been a formal class, the test was calling it without `new`; refactored now with sufficient mock data to take into account it is a class - Testing: Due apparently to Path having not been a formal class, the test
was calling it without `new`; refactored now with sufficient mock data
to take into account it is a class
# 3.0.0-alpha.1 # 3.0.0-alpha.1
(Only released on npm for reserving name rather than being intended as a testable (Only released on npm for reserving name rather than being intended as a
release; the list below, however, does list the fixes it includes) testable release; the list below, however, does list the fixes it includes.)
- Fix: Hide Overview panel in Chrome < 49 (rendering and performance issues);
see #26 and <https://code.google.com/p/chromium/issues/detail?id=565120>;
PR #44 and #46
- Fix: Multiselect not working after zoom in Firefox (#55; PR #56)
- Fix: Rubberband box is not placed properly (left and top) for imported SVG - Fix: Rubberband box is not placed properly (left and top) for imported SVG
images when moved multiple times (#48; PR #49) images when moved multiple times (#48; PR #49)
- Fix: Remove double-bind of keypresses Z and Y (#59; PR #60) - Fix: Remove double-bind of keypresses Z and Y (#59; PR #60)
- Fix: For import SVG image leading to unattached dragtool (PR #7) - Fix: For import SVG image leading to unattached dragtool (PR #7)
- Fix `browser.js` error messages when testing whether `replaceItem` and - Fix `browser.js` error triggering for `supportsPathInsertItemBefore` and
`supportsPathReplaceItem` when testing whether `replaceItem` and
`insertItemBefore` work, since paths must start with M commands `insertItemBefore` work, since paths must start with M commands
- Fix: IE11 bug with `NoModificationAllowedError` upon selecting multiple
elements (#54, PR #57)
- Fix: Some browsers (IE, Chrome) require objects passed to `getInsectionList`
to be of correct the type; PR #67
- Fix: Remove fix that cloned path segments and add tests to show it works; - Fix: Remove fix that cloned path segments and add tests to show it works;
PR #69 PR #69
- Fix: Preserve rx ry attributes on ellipse elements for batik compatibility; - Fix: Preserve rx ry attributes on ellipse elements for batik compatibility;
@ -519,7 +543,7 @@ release; the list below, however, does list the fixes it includes)
- Fix: Hidden font-size label/inability to set font size; #62; PR #83 - Fix: Hidden font-size label/inability to set font size; #62; PR #83
- Fix: Check for deleted defs after paste; pasting a line with markers - Fix: Check for deleted defs after paste; pasting a line with markers
produces invalid SVG if original line was deleted; #82; PR #90 produces invalid SVG if original line was deleted; #82; PR #90
- Fix: Update layers panel on programatic call to `createLayer`; #104; - Fix: Update layers panel on programmatic call to `createLayer`; #104;
PR #106 PR #106
- Fix: Trigger `svgEditorReady` after the canvas is ready (PR #96) and - Fix: Trigger `svgEditorReady` after the canvas is ready (PR #96) and
when opened through an iframe (#93; PR #127) when opened through an iframe (#93; PR #127)
@ -528,16 +552,23 @@ release; the list below, however, does list the fixes it includes)
- Fix: Layers in svgcanvas; PR #107 - Fix: Layers in svgcanvas; PR #107
- Fix: `createSVGRect()` in `getIntersectionList`; `createSVGRect()` does not - Fix: `createSVGRect()` in `getIntersectionList`; `createSVGRect()` does not
have parameters, they must be set on the object after; PR #138 have parameters, they must be set on the object after; PR #138
- Fix: Resizing an element would set `stroke="null"` on it; PR #148 - Fix: Resizing an element would set `stroke="null"` on it; PR #142
- Fix: No longer saving or exporting in Chrome >= 60 and Opera; #193; PR #201
- Fix: Importing complex paths (paths with several "M/m" and "Z/z"); PR #195 - Fix: Importing complex paths (paths with several "M/m" and "Z/z"); PR #195
- Fix: Update `pathseg.js` to latest version with a fix for Firefox 59. - Fix (Firefox 59): Update `pathseg.js` to latest version to fix; #216; PR #217
Firefox 58, Chrome 65, and Safari Tech Preview all confirmed to edit paths - Fix (Firefox): Multiselect not working after zoom (#55; PR #56)
correctly; #216; PR #217 - Fix (Chrome/Opera): No longer saving or exporting in Chrome >= 60; #193;
- Fix: Improve `supportsNativeTransformLists` detection beyond Firefox; PR #201
PR #158 - Fix (Chrome): Hide Overview panel in Chrome < 49 (rendering and performance
- Fix: Overcome browsers blocking data URIs by Blob URLs where available; issues); see #26 and <https://code.google.com/p/chromium/issues/detail?id=565120>;
#222; PR #224 PR #44 and #46
- Fix (IE, Chrome): Some browsers require objects passed to `getInsectionList`
to be of correct the type; PR #67
- Fix (IE11): `NoModificationAllowedError` upon selecting multiple elements
(#54, PR #57)
- Fix (Browser-specific): Improve `supportsNativeTransformLists` detection
beyond Firefox; PR #158
- Fix (Browser-specific): Overcome browsers blocking data URIs by Blob URLs
where available for export; #222; PR #224
- Enhancement: Add ability to set SVG drawings without adding to the undo - Enhancement: Add ability to set SVG drawings without adding to the undo
stack; PR #208 stack; PR #208
- Enhancement: Clipboard that works across tabs and windows; PR #206 - Enhancement: Clipboard that works across tabs and windows; PR #206
@ -551,13 +582,14 @@ release; the list below, however, does list the fixes it includes)
- Enhancement (i18n): zh-CN language option; PR #125 - Enhancement (i18n): zh-CN language option; PR #125
- Enhancement: Add `composer.json` to let PHP developers keep track of - Enhancement: Add `composer.json` to let PHP developers keep track of
svgedit on `packagist.org`; PR #174. svgedit on `packagist.org`; PR #174.
- Enhancement: `addSvgElementFromJson` to create text nodes and build
children; PR #130
- Optimization: `getBBox` performance improvements; PR #103 - Optimization: `getBBox` performance improvements; PR #103
- Optimization: Loading time (by removing unnecessary code); PR #148 - Optimization: Loading time (by removing unnecessary code); PR #148
- Localization: French (PR #132) and German (PR #111) updates - Localization: French (PR #132) and German (PR #111) updates
- Refactoring: Added `HistoryRecordingService` and separate `layer.js` - Refactoring: Added `HistoryRecordingService` and separate `layer.js`
file; PR #107 file; PR #107
- Refactoring: Migrate more to `draw.js` and utilities; PR #109 - Refactoring: Migrate more to `draw.js` and utilities; PR #109
- Refactoring: `addSvgElementFromJson` expansion; PR #130
- Testing: Draw; PR #109 - Testing: Draw; PR #109
- Docs: Fix reference link in comment; PR #105 - Docs: Fix reference link in comment; PR #105
- Docs: Complete Markdown converted SvgCanvas docs; #92; PR #99 - Docs: Complete Markdown converted SvgCanvas docs; #92; PR #99
@ -575,10 +607,13 @@ For a complete list of changes run:
git log 81afaa9..5986f1e git log 81afaa9..5986f1e
``` ```
- Enhancement: Use `getIntersectionList` when available (<https://github.com/SVG-Edit/svgedit/issues/36>) - Enhancement: Use `getIntersectionList` when available
- Enhancement: Switched to https for all URLs (<https://github.com/SVG-Edit/svgedit/issues/31>) (<https://github.com/SVG-Edit/svgedit/issues/36>)
- Enhancement: Switched to https for all URLs
(<https://github.com/SVG-Edit/svgedit/issues/31>)
- Enhancement: Minor administrative updates (docs/, README.md, author emails) - Enhancement: Minor administrative updates (docs/, README.md, author emails)
- Fix: Bug where all icons were broken in Safari (<https://github.com/SVG-Edit/svgedit/issues/29>) - Fix: Bug where all icons were broken in Safari
(<https://github.com/SVG-Edit/svgedit/issues/29>)
- Fix: Updated translations for "page" and "delete" in 57 locales. - Fix: Updated translations for "page" and "delete" in 57 locales.
# 2.8 (Ellipse) - November 24th, 2015 # 2.8 (Ellipse) - November 24th, 2015
@ -589,36 +624,53 @@ For a complete list of changes run:
git log 4bb15e0..253b4bf git log 4bb15e0..253b4bf
``` ```
- Enhancement (Experimental): Client-side PDF export (issue [#1156](https://code.google.com/p/svg-edit/issues/detail?id=1156)) (to data: URI) and server-side PDF export (where not supported in browser and using ext-server_opensave.js); uses [jsPDF](https://github.com/MrRio/jsPDF) library - Enhancement (Experimental): Client-side PDF export
- Enhancement: For image exports, provided "datauri" property to "exported" event. (issue [#1156](https://code.google.com/p/svg-edit/issues/detail?id=1156))
- Enhancement: Allow config "exportWindowType" of value "new" or "same" to indicate whether to reuse the same export window upon subsequent exports (to data: URI) and server-side PDF export (where not supported in browser
and using ext-server_opensave.js); uses
[jsPDF](https://github.com/MrRio/jsPDF) library
- Enhancement: For image exports, provided "datauri" property to "exported"
event.
- Enhancement: Allow config "exportWindowType" of value "new" or "same" to
indicate whether to reuse the same export window upon subsequent exports
- Enhancement: Added openclipart support to imagelib extension - Enhancement: Added openclipart support to imagelib extension
- Enhancement: allow showGrid to be set before load - Enhancement: allow showGrid to be set before load
- Enhancement: Support loading of (properly URL encoded) non-base64 "data:image/svg+xml;utf8,"-style data URIs - Enhancement: Support loading of (properly URL encoded) non-base64
- Enhancement: More clear naming of labels: "Open Image"->"Open SVG" and "Import SVG"->"Import Image" ( issue [#1206](https://code.google.com/p/svg-edit/issues/detail?id=1206)) "data:image/svg+xml;utf8,"-style data URIs
- Enhancement: Included reference to (repository-ignored) custom.css file which once created by the user, as with config.js, allows customization without modifying the repo (its main editor file) - Enhancement: More clear naming of labels: "Open Image"->"Open SVG" and
"Import SVG"->"Import Image" ( issue [#1206](https://code.google.com/p/svg-edit/issues/detail?id=1206))
- Enhancement: Included reference to (repository-ignored) `custom.css` file
which once created by the user, as with config.js, allows customization
without modifying the repo (its main editor file)
- Enhancement: Updated Slovenian locale. - Enhancement: Updated Slovenian locale.
- Demo enhancement: Support and demonstrate export in embedded editor - Demo enhancement: Support and demonstrate export in embedded editor
- Upgrade: canvg version - Upgrade: canvg version
- Upgrade: Added PathSeg polyfill to workaround pathseg removal in browsers. - Upgrade: Added PathSeg polyfill to workaround pathseg removal in browsers.
- Fix: pathtool bug where paths were erroneously deleted. - Fix: pathtool bug where paths were erroneously deleted.
- Fix: Context menu did not work for groups. - Fix: Context menu did not work for groups.
- Fix: Avoid error in ungrouping function when no elements selected (was impacting MathJax "Ok" button). - Fix: Avoid error in ungrouping function when no elements selected (was
- Fix: issue [#1205](https://code.google.com/p/svg-edit/issues/detail?id=1205) with Snap to Grid preventing editing impacting MathJax "Ok" button).
- Fix: issue [#1205](https://code.google.com/p/svg-edit/issues/detail?id=1205)
with Snap to Grid preventing editing
- Fix: bug in exportImage if svgEditor.setCustomHandlers calls made - Fix: bug in exportImage if svgEditor.setCustomHandlers calls made
- Fix: Ensure "loading..." message closes upon completion or error - Fix: Ensure "loading..." message closes upon completion or error
- Fix: Ensure all dependencies are first available before canvg (and jsPDF) usage - Fix: Ensure all dependencies are first available before canvg (and jsPDF) usage
- Fix: Allow for empty images - Fix: Allow for empty images
- Fix: Minor improvement in display when icon size is set to small - Fix: Minor improvement in display when icon size is set to small
- Fix: Based64-encoding issues with Unicode text (e.g., in data URIs or icons) - Fix: Based64-encoding issues with Unicode text (e.g., in data URIs or icons)
- Fix: 2.7 regression in filesave.php for SVG saving (used by ext-server_opensave.js when client doesn't support the download attribute) - Fix: 2.7 regression in filesave.php for SVG saving (used by
`ext-server_opensave.js` when client doesn't support the download attribute)
- Potentially breaking API changes (subject to further alteration before release): - Potentially breaking API changes (subject to further alteration before release):
* Remove 2.7-deprecated "pngsave" (in favor of "exportImage") * Remove 2.7-deprecated "pngsave" (in favor of "exportImage")
* Data URIs must be properly URL encoded (use encodeURIComponent() on the "data:..." prefix and double encodeURIComponent() the remaining content) * Data URIs must be properly URL encoded (use encodeURIComponent() on the
"data:..." prefix and double encodeURIComponent() the remaining content)
* Remove "paramurl" parameter (use "url" or "source" with a data: URI instead) * Remove "paramurl" parameter (use "url" or "source" with a data: URI instead)
* svgCanvas.rasterExport now takes an optional window name as the third argument, with the supplied name also being provided as a "exportWindowName" property on the object passed to the [exportImage](https://code.google.com/p/svg-edit/wiki/ExtensionDocs#svgEditor_public_methods) method optionally supplied to svgEditor.setCustomHandlers. * svgCanvas.rasterExport now takes an optional window name as the third
* Change 2.7 allowance of "PDF" as a type in the canvas "rasterExport" method and the "exported" event to instead be moved to the canvas "exportPDF" method and "exportedPDF" event respectively. argument, with the supplied name also being provided as a
"exportWindowName" property on the object passed to the [exportImage](https://code.google.com/p/svg-edit/wiki/ExtensionDocs#svgEditor_public_methods) method optionally supplied to svgEditor.setCustomHandlers.
* Change 2.7 allowance of "PDF" as a type in the canvas "rasterExport"
method and the "exported" event to instead be moved to the canvas
"exportPDF" method and "exportedPDF" event respectively.
# 2.7.1 (applied to 2.7 branch) - April 17, 2014 # 2.7.1 (applied to 2.7 branch) - April 17, 2014
@ -627,32 +679,92 @@ git log 4bb15e0..253b4bf
# 2.7 (Deltoid curve) - April 7th, 2014 # 2.7 (Deltoid curve) - April 7th, 2014
- Export to PNG, JPEG, BMP, WEBP (including quality control for JPEG/WEBP) for default editor and for the server_opensave extension - Export to PNG, JPEG, BMP, WEBP (including quality control for JPEG/WEBP)
for default editor and for the server_opensave extension
- Added Star, Polygon, and Panning Extensions r2318 r2319 r2333 - Added Star, Polygon, and Panning Extensions r2318 r2319 r2333
- Added non-default extension, ext-xdomain-messaging.js, moving cross-domain messaging code (as used by the embedded editor) out of core and requiring, when the extension IS included, that configuration (an array "allowedOrigins") be set in order to allow access by any domain (even same domain). - Added non-default extension, ext-xdomain-messaging.js, moving cross-domain
- Cause embedded editor to pass on URL arguments to the child editor (child iframe) messaging code (as used by the embedded editor) out of core and requiring,
- Added default extension, ext-storage.js moving storage setting code into this (optional) extension; contains dialog to ask user whether they wish to utilize local storage for prefs and/or content; provides configuration options to tweak behaviors. when the extension IS included, that configuration (an array
- Allow for a new file config.js within the editor folder (but not committed to SVN and ignored) which is always loaded and can be used for supplying configuration which happens early enough to affect URL or user storage configuration, in addition to extension behavior configuration. Provided config-sample.js to indicate types of configuration one could use (see also defaultPrefs, defaultExtensions, and defaultConfig within svg-editor.js ) "allowedOrigins") be set in order to allow access by any domain (even
- Added configuration "preventAllURLConfig", "lockExtensions", and/or "preventURLContentLoading" for greater control of what can be configured via URL. same domain).
- Allow second argument object to setConfig containing "allowInitialUserOverride" booleans to allow for preference config in config.js to be overridden by URL or preferences in user storage; also can supply "overwrite" boolean in 2nd argument object if set to false to prevent overwriting of any prior-set configuration (URL config/pref setting occurs in this manner automatically for security reasons). - Cause embedded editor to pass on URL arguments to the child editor
- Allow server_opensave extension to work wholly client-side (if browser supports the download attribute) (child iframe)
- Added default extension, ext-storage.js moving storage setting code into
this (optional) extension; contains dialog to ask user whether they wish
to utilize local storage for prefs and/or content; provides configuration
options to tweak behaviors.
- Allow for a new file config.js within the editor folder (but not committed
to SVN and ignored) which is always loaded and can be used for supplying
configuration which happens early enough to affect URL or user storage
configuration, in addition to extension behavior configuration. Provided
`config-sample.js` to indicate types of configuration one could use
(see also `defaultPrefs`, `defaultExtensions`, and `defaultConfig` within
`svg-editor.js`)
- Added configuration `preventAllURLConfig`, `lockExtensions`, and/or
`preventURLContentLoading` for greater control of what can be configured
via URL.
- Allow second argument object to setConfig containing
`allowInitialUserOverride` booleans to allow for preference config in
`config.js` to be overridden by URL or preferences in user storage;
also can supply "overwrite" boolean in 2nd argument object if set to
`false` to prevent overwriting of any prior-set configuration (URL
config/pref setting occurs in this manner automatically for
security reasons).
- Allow server_opensave extension to work wholly client-side (if
browser supports the download attribute)
- Added WebAppFind extension - Added WebAppFind extension
- Added new php_savefile extension to replace outdated, non-functioning server-save code; requires user to create "savefile_config.php" file and do any validation there (for their own security) - Added new php_savefile extension to replace outdated, non-functioning
- Use addEventListener for 'beforeunload' event so user can add their own if desired server-save code; requires user to create `savefile_config.php` file
- Changed locale behavior to always load from locale file, including English. Allow extensions to add new "langReady" callback which is passed an object with "lang" and "uiStrings" properties whenever the locale data is first made available or changed by the user (this callback will not be invoked until the locale data is available). Extensions can add strings to all locales and utilize this mechanism. and do any validation there (for their own security)
- Use addEventListener for 'beforeunload' event so user can add their
own if desired
- Changed locale behavior to always load from locale file, including
English. Allow extensions to add new `langReady` callback which is passed
an object with `lang` and `uiStrings` properties whenever the locale data
is first made available or changed by the user (this callback will not
be invoked until the locale data is available). Extensions can add
strings to all locales and utilize this mechanism.
- Made fixes impacting path issues and also ext-connector.js - Made fixes impacting path issues and also ext-connector.js
- Fixed a bug where the position number supplied on an extension object was too high (e.g., if too few other extensions were included, the extension might not show up because its position was set too high). - Fixed a bug where the position number supplied on an extension object
was too high (e.g., if too few other extensions were included,
the extension might not show up because its position was set too high).
- Added Polish locale - Added Polish locale
- Zoom features - Zoom features
- Make extension paths relative within extensions (issue 1184) - Make extension paths relative within extensions (issue 1184)
- Security improvements and other fixes - Security improvements and other fixes
- Embedded editor can now work same domain without JSON parsing and the consequent potential loss of arguments or return values. - Embedded editor can now work same domain without JSON parsing and the
consequent potential loss of arguments or return values.
- Potentially breaking API changes: - Potentially breaking API changes:
* Disallowed "extPath", "imgPath", "langPath", and "jGraduatePath" setting via URL and prevent cross-domain/cross-folder extensions being set by URL (security enhancement) * Disallowed "extPath", "imgPath", "langPath", and "jGraduatePath"
* Deprecated "pngsave" option called by setCustomHandlers() in favor of "exportImage" (to accommodate export of other image types). Second argument will now supply, in addition to "issues" and "svg", the properties "type" (currently 'PNG', 'JPEG', 'BMP', 'WEBP'), "mimeType", and "quality" (for 'JPEG' and 'WEBP' types). setting via URL and prevent cross-domain/cross-folder extensions
* Default extensions will now always load (along with those supplied in the URL unless the latter is prohibited by configuration), so if you do not wish your old code to load all of the default extensions, you will need to add `&noDefaultExtensions=true` to the URL (or add equivalent configuration in config.js). ext-overview_window.js can now be excluded though it is still a default. being set by URL (security enhancement)
* Preferences and configuration options must be within the list supplied within svg-editor.js (should include those of all documented extensions). * Deprecated "pngsave" option called by setCustomHandlers() in favor
* Embedded messaging will no longer work by default for privacy/data integrity reasons. One must include the "ext-xdomain-messaging.js" extension and supply an array configuration item, "allowedOrigins" with potential values including: "\*" (to allow all domains--strongly discouraged!), "null" as a string to allow `file:///` access, window.location.origin (to allow same domain access), or specific trusted origins. The embedded editor works without the extension if the main editor is on the same domain, but if cross-domain control is needed, the "allowedOrigins" array must be supplied by a call to svgEditor.setConfig({allowedOrigins: [origin1, origin2, etc.]}) in the new config.js file. of "exportImage" (to accommodate export of other image types).
Second argument will now supply, in addition to "issues" and
"svg", the properties "type" (currently 'PNG', 'JPEG', 'BMP',
'WEBP'), "mimeType", and "quality" (for 'JPEG' and 'WEBP' types).
* Default extensions will now always load (along with those supplied
in the URL unless the latter is prohibited by configuration), so
if you do not wish your old code to load all of the default
extensions, you will need to add `&noDefaultExtensions=true` to the
URL (or add equivalent configuration in `config.js`).
`ext-overview_window.js` can now be excluded though it is still
a default.
* Preferences and configuration options must be within the list supplied
within `svg-editor.js` (should include those of all documented
extensions).
* Embedded messaging will no longer work by default for privacy/data
integrity reasons. One must include the `ext-xdomain-messaging.js`
extension and supply an array configuration item, `allowedOrigins`
with potential values including: "\*" (to allow all
domains--strongly discouraged!), "null" as a string to allow
`file:///` access, window.location.origin (to allow same domain
access), or specific trusted origins. The embedded editor works
without the extension if the main editor is on the same domain,
but if cross-domain control is needed, the `allowedOrigins` array
must be supplied by a call to
`svgEditor.setConfig({allowedOrigins: [origin1, origin2, etc.]})`
in the new `config.js` file.
# 2.6 (Cycloid) - January 15th, 2013 # 2.6 (Cycloid) - January 15th, 2013
@ -667,7 +779,7 @@ git log 4bb15e0..253b4bf
- Basic Server-based tools for file opening/saving - Basic Server-based tools for file opening/saving
- In-group editing - In-group editing
- Cut/Copy/Paste - Cut/Copy/Paste
- full list: http://code.google.com/p/svg-edit/issues/list?can=1&q=label%3ANeededFor-2.6 - full list: <http://code.google.com/p/svg-edit/issues/list?can=1&q=label%3ANeededFor-2.6>
# 2.5 - June 15, 2010 # 2.5 - June 15, 2010
@ -746,7 +858,7 @@ git log 4bb15e0..253b4bf
- fix flyouts when using color picker - fix flyouts when using color picker
- change license from GPLv2 to Apache License v2.0 - change license from GPLv2 to Apache License v2.0
- replaced Farbtastic with jPicker, because of the license issues - replaced Farbtastic with jPicker, because of the license issues
- removed dependency on svgcanvas.svg, now created in JavaScript - removed dependency on `svgcanvas.svg`, now created in JavaScript
- added Select tool - added Select tool
- using jQuery hosted by Google instead of local version - using jQuery hosted by Google instead of local version
- allow dragging of elements - allow dragging of elements

19
dist/index-es.js vendored
View File

@ -24868,40 +24868,41 @@ var jPicker = function jPicker($) {
default: default:
var ret = {}; var ret = {};
var nameLength = name.length;
for (var i = 0; i < name.length; i++) { for (var i = 0; i < nameLength; i++) {
switch (name.charAt(i)) { switch (name.charAt(i)) {
case 'r': case 'r':
if (name.length === 1) ret = r;else ret.r = r; if (nameLength === 1) ret = r;else ret.r = r;
break; break;
case 'g': case 'g':
if (name.length === 1) ret = g;else ret.g = g; if (nameLength === 1) ret = g;else ret.g = g;
break; break;
case 'b': case 'b':
if (name.length === 1) ret = b;else ret.b = b; if (nameLength === 1) ret = b;else ret.b = b;
break; break;
case 'a': case 'a':
if (name.length === 1) ret = a;else ret.a = a; if (nameLength === 1) ret = a;else ret.a = a;
break; break;
case 'h': case 'h':
if (name.length === 1) ret = h;else ret.h = h; if (nameLength === 1) ret = h;else ret.h = h;
break; break;
case 's': case 's':
if (name.length === 1) ret = s;else ret.s = s; if (nameLength === 1) ret = s;else ret.s = s;
break; break;
case 'v': case 'v':
if (name.length === 1) ret = v;else ret.v = v; if (nameLength === 1) ret = v;else ret.v = v;
break; break;
} }
} }
return !name.length ? val.call($this, 'all') : ret; return _typeof(ret) === 'object' && !Object.keys(ret).length ? val.call($this, 'all') : ret;
} }
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

19
dist/index-umd.js vendored
View File

@ -24874,40 +24874,41 @@
default: default:
var ret = {}; var ret = {};
var nameLength = name.length;
for (var i = 0; i < name.length; i++) { for (var i = 0; i < nameLength; i++) {
switch (name.charAt(i)) { switch (name.charAt(i)) {
case 'r': case 'r':
if (name.length === 1) ret = r;else ret.r = r; if (nameLength === 1) ret = r;else ret.r = r;
break; break;
case 'g': case 'g':
if (name.length === 1) ret = g;else ret.g = g; if (nameLength === 1) ret = g;else ret.g = g;
break; break;
case 'b': case 'b':
if (name.length === 1) ret = b;else ret.b = b; if (nameLength === 1) ret = b;else ret.b = b;
break; break;
case 'a': case 'a':
if (name.length === 1) ret = a;else ret.a = a; if (nameLength === 1) ret = a;else ret.a = a;
break; break;
case 'h': case 'h':
if (name.length === 1) ret = h;else ret.h = h; if (nameLength === 1) ret = h;else ret.h = h;
break; break;
case 's': case 's':
if (name.length === 1) ret = s;else ret.s = s; if (nameLength === 1) ret = s;else ret.s = s;
break; break;
case 'v': case 'v':
if (name.length === 1) ret = v;else ret.v = v; if (nameLength === 1) ret = v;else ret.v = v;
break; break;
} }
} }
return !name.length ? val.call($this, 'all') : ret; return _typeof(ret) === 'object' && !Object.keys(ret).length ? val.call($this, 'all') : ret;
} }
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -591,39 +591,42 @@ const jPicker = function ($) {
case 'all': return {r, g, b, a, h, s, v, hex: val.call($this, 'hex'), ahex: val.call($this, 'ahex')}; case 'all': return {r, g, b, a, h, s, v, hex: val.call($this, 'hex'), ahex: val.call($this, 'ahex')};
default: default:
let ret = {}; let ret = {};
for (let i = 0; i < name.length; i++) { const nameLength = name.length;
for (let i = 0; i < nameLength; i++) {
switch (name.charAt(i)) { switch (name.charAt(i)) {
case 'r': case 'r':
if (name.length === 1) ret = r; if (nameLength === 1) ret = r;
else ret.r = r; else ret.r = r;
break; break;
case 'g': case 'g':
if (name.length === 1) ret = g; if (nameLength === 1) ret = g;
else ret.g = g; else ret.g = g;
break; break;
case 'b': case 'b':
if (name.length === 1) ret = b; if (nameLength === 1) ret = b;
else ret.b = b; else ret.b = b;
break; break;
case 'a': case 'a':
if (name.length === 1) ret = a; if (nameLength === 1) ret = a;
else ret.a = a; else ret.a = a;
break; break;
case 'h': case 'h':
if (name.length === 1) ret = h; if (nameLength === 1) ret = h;
else ret.h = h; else ret.h = h;
break; break;
case 's': case 's':
if (name.length === 1) ret = s; if (nameLength === 1) ret = s;
else ret.s = s; else ret.s = s;
break; break;
case 'v': case 'v':
if (name.length === 1) ret = v; if (nameLength === 1) ret = v;
else ret.v = v; else ret.v = v;
break; break;
} }
} }
return !name.length ? val.call($this, 'all') : ret; return typeof ret === 'object' && !Object.keys(ret).length
? val.call($this, 'all')
: ret;
} }
} }
if (context != null && context === $this) return; if (context != null && context === $this) return;

View File

@ -24871,40 +24871,41 @@
default: default:
var ret = {}; var ret = {};
var nameLength = name.length;
for (var i = 0; i < name.length; i++) { for (var i = 0; i < nameLength; i++) {
switch (name.charAt(i)) { switch (name.charAt(i)) {
case 'r': case 'r':
if (name.length === 1) ret = r;else ret.r = r; if (nameLength === 1) ret = r;else ret.r = r;
break; break;
case 'g': case 'g':
if (name.length === 1) ret = g;else ret.g = g; if (nameLength === 1) ret = g;else ret.g = g;
break; break;
case 'b': case 'b':
if (name.length === 1) ret = b;else ret.b = b; if (nameLength === 1) ret = b;else ret.b = b;
break; break;
case 'a': case 'a':
if (name.length === 1) ret = a;else ret.a = a; if (nameLength === 1) ret = a;else ret.a = a;
break; break;
case 'h': case 'h':
if (name.length === 1) ret = h;else ret.h = h; if (nameLength === 1) ret = h;else ret.h = h;
break; break;
case 's': case 's':
if (name.length === 1) ret = s;else ret.s = s; if (nameLength === 1) ret = s;else ret.s = s;
break; break;
case 'v': case 'v':
if (name.length === 1) ret = v;else ret.v = v; if (nameLength === 1) ret = v;else ret.v = v;
break; break;
} }
} }
return !name.length ? val.call($this, 'all') : ret; return _typeof(ret) === 'object' && !Object.keys(ret).length ? val.call($this, 'all') : ret;
} }
} }

View File

@ -24871,40 +24871,41 @@
default: default:
var ret = {}; var ret = {};
var nameLength = name.length;
for (var i = 0; i < name.length; i++) { for (var i = 0; i < nameLength; i++) {
switch (name.charAt(i)) { switch (name.charAt(i)) {
case 'r': case 'r':
if (name.length === 1) ret = r;else ret.r = r; if (nameLength === 1) ret = r;else ret.r = r;
break; break;
case 'g': case 'g':
if (name.length === 1) ret = g;else ret.g = g; if (nameLength === 1) ret = g;else ret.g = g;
break; break;
case 'b': case 'b':
if (name.length === 1) ret = b;else ret.b = b; if (nameLength === 1) ret = b;else ret.b = b;
break; break;
case 'a': case 'a':
if (name.length === 1) ret = a;else ret.a = a; if (nameLength === 1) ret = a;else ret.a = a;
break; break;
case 'h': case 'h':
if (name.length === 1) ret = h;else ret.h = h; if (nameLength === 1) ret = h;else ret.h = h;
break; break;
case 's': case 's':
if (name.length === 1) ret = s;else ret.s = s; if (nameLength === 1) ret = s;else ret.s = s;
break; break;
case 'v': case 'v':
if (name.length === 1) ret = v;else ret.v = v; if (nameLength === 1) ret = v;else ret.v = v;
break; break;
} }
} }
return !name.length ? val.call($this, 'all') : ret; return _typeof(ret) === 'object' && !Object.keys(ret).length ? val.call($this, 'all') : ret;
} }
} }