From 16241dda2980774cdff9df8a1afeda06633135d2 Mon Sep 17 00:00:00 2001 From: sashadev-sky Date: Mon, 17 Jun 2019 23:09:20 -0400 Subject: [PATCH] Implement svg --- Gruntfile.js | 227 +++-- assets/icons/border_clear.svg | 6 + assets/icons/border_outer.svg | 6 + assets/icons/crop_rotate.svg | 6 + assets/icons/delete_forever.svg | 7 + assets/icons/explore.svg | 6 + assets/icons/flip_to_back.svg | 6 + assets/icons/flip_to_front.svg | 6 + assets/icons/get_app.svg | 6 + assets/icons/lock.svg | 7 + assets/icons/opacity.svg | 6 + assets/icons/restore.svg | 6 + assets/icons/symbol/sprite.symbol.html | 417 ++++++++ assets/icons/symbol/sprite.symbol.svg | 1 + assets/icons/transform.svg | 6 + assets/icons/unlock.svg | 6 + dist/leaflet.distortableimage.css | 32 +- dist/leaflet.distortableimage.js | 186 ++-- package-lock.json | 1141 +++++++++++++++++++++- package.json | 2 + src/edit/DistortableImage.EditToolbar.js | 186 ++-- 21 files changed, 1987 insertions(+), 285 deletions(-) create mode 100644 assets/icons/border_clear.svg create mode 100644 assets/icons/border_outer.svg create mode 100644 assets/icons/crop_rotate.svg create mode 100644 assets/icons/delete_forever.svg create mode 100644 assets/icons/explore.svg create mode 100644 assets/icons/flip_to_back.svg create mode 100644 assets/icons/flip_to_front.svg create mode 100644 assets/icons/get_app.svg create mode 100644 assets/icons/lock.svg create mode 100644 assets/icons/opacity.svg create mode 100644 assets/icons/restore.svg create mode 100644 assets/icons/symbol/sprite.symbol.html create mode 100644 assets/icons/symbol/sprite.symbol.svg create mode 100644 assets/icons/transform.svg create mode 100644 assets/icons/unlock.svg diff --git a/Gruntfile.js b/Gruntfile.js index ce5e68a92..e8f2168a6 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -3,112 +3,167 @@ module.exports = function(grunt) { require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks); grunt.initConfig({ - pkg: grunt.file.readJSON('package.json'), - - jshint: { - options: { - node: true, - browser: true, - esnext: true, - bitwise: true, - curly: true, - eqeqeq: true, - immed: true, - indent: 4, - latedef: true, - newcap: true, - noarg: true, - regexp: true, - undef: true, - unused: 'strict', - trailing: true, - smarttabs: true, - globals: { - L: false, - $: false, - LeafletToolbar: false, - warpWebGl: false, - EXIF: false, - alert: false, - - // Mocha - - describe: false, - it: false, - before: false, - after: false, - beforeEach: false, - afterEach: false, - chai: false, - expect: false, - sinon: false - } - }, - source: { - src: [ 'src/**/*.js', 'package.json' ] - }, - grunt: { - src: [ 'Gruntfile.js' ] - } + pkg: grunt.file.readJSON("package.json"), + + jshint: { + options: { + node: true, + browser: true, + esnext: true, + bitwise: true, + curly: true, + eqeqeq: true, + immed: true, + indent: 4, + latedef: true, + newcap: true, + noarg: true, + regexp: true, + undef: true, + unused: "strict", + trailing: true, + smarttabs: true, + globals: { + L: false, + $: false, + LeafletToolbar: false, + warpWebGl: false, + EXIF: false, + alert: false, + + // Mocha + + describe: false, + it: false, + before: false, + after: false, + beforeEach: false, + afterEach: false, + chai: false, + expect: false, + sinon: false + } + }, + source: { + src: ["src/**/*.js", "package.json"] }, + grunt: { + src: ["Gruntfile.js"] + } + }, - karma: { - development: { - configFile: 'test/karma.conf.js', - }, - test: { - configFile: 'test/karma.conf.js', - } + karma: { + development: { + configFile: "test/karma.conf.js" }, + test: { + configFile: "test/karma.conf.js" + } + }, - watch: { - options : { - livereload: true + svg_sprite: { + options: { + // Task-specific options go here. + }, + dist: { + expand: true, + cwd: "assets/", + src: ["icons/*.svg"], + dest: "assets/icons/", + options: { + dest: "assets/icons/", + log: "debug", + svg: { + dimensionAttributes: false }, - source: { - files: [ - 'src/**/*.js', - 'test/**/*.js', - 'Gruntfile.js' - ], - tasks: [ 'build:js' ] + shape: { + dimension: { + maxWidth: 18, + maxHeight: 18, + attributes: true + }, + // viewBox: "0 0 18 18", + // dest: "svg-sprite" + }, + mode: { + render: { + css: true + }, + symbol: { + sprite: "sprite.symbol.svg", + // viewBox: "0 0 18 18", + // inline: true, + example: true + } } + } + } + }, + + // svgstore: { + // options: { + // prefix: "icon-", // This will prefix each ID + // svg: { + // // will add and overide the the default xmlns="http://www.w3.org/2000/svg" attribute to the resulting SVG + // viewBox: "0 0 18 18", + // xmlns: "http://www.w3.org/2000/svg" + // } + // }, + // your_target: { + // symbol: true, + // inline: true, + // formatting: { + // indent_size: 2 + // } + // // Target-specific file lists and/or options go here. + // } + // }, + + watch: { + options: { + livereload: true }, + source: { + files: ["src/**/*.js", "test/**/*.js", "Gruntfile.js"], + tasks: ["build:js"] + } + }, - concat: { - dist: { - src: [ - 'src/util/*.js', - 'src/DistortableImageOverlay.js', - 'src/DistortableCollection.js', - 'src/edit/getEXIFdata.js', - 'src/edit/EditHandle.js', - 'src/edit/LockHandle.js', - 'src/edit/DistortHandle.js', - 'src/edit/RotateScaleHandle.js', - 'src/edit/RotateHandle.js', - 'src/edit/ScaleHandle.js', - 'src/edit/DistortableImage.EditToolbar.js', - 'src/edit/DistortableImage.Edit.js', - 'src/edit/tools/DistortableImage.Keymapper.js', - 'src/edit/BoxSelectHandle.js' - ], - dest: 'dist/leaflet.distortableimage.js', - } + concat: { + dist: { + src: [ + "src/util/*.js", + "src/DistortableImageOverlay.js", + "src/DistortableCollection.js", + "src/edit/getEXIFdata.js", + "src/edit/EditHandle.js", + "src/edit/LockHandle.js", + "src/edit/DistortHandle.js", + "src/edit/RotateScaleHandle.js", + "src/edit/RotateHandle.js", + "src/edit/ScaleHandle.js", + "src/edit/DistortableImage.EditToolbar.js", + "src/edit/DistortableImage.Edit.js", + "src/edit/tools/DistortableImage.Keymapper.js", + "src/edit/BoxSelectHandle.js" + ], + dest: "dist/leaflet.distortableimage.js" } + } }); /* Run tests once. */ grunt.registerTask('test', [ 'jshint', 'karma:test' ]); /* Default (development): Watch files and lint, test, and build on change. */ - grunt.registerTask('default', ['karma:development:start', 'watch']); + grunt.registerTask('default', ['svg_sprite', 'karma:development:start', 'watch',]); grunt.registerTask('build', [ 'jshint', 'karma:development:start', + 'svg_sprite', 'coverage', - 'concat:dist' + 'concat:dist', ]); grunt.registerTask('coverage', 'Custom commmand-line reporter for karma-coverage', function() { diff --git a/assets/icons/border_clear.svg b/assets/icons/border_clear.svg new file mode 100644 index 000000000..2e2d9c324 --- /dev/null +++ b/assets/icons/border_clear.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/icons/border_outer.svg b/assets/icons/border_outer.svg new file mode 100644 index 000000000..20e75e902 --- /dev/null +++ b/assets/icons/border_outer.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/icons/crop_rotate.svg b/assets/icons/crop_rotate.svg new file mode 100644 index 000000000..cf97e2f99 --- /dev/null +++ b/assets/icons/crop_rotate.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/icons/delete_forever.svg b/assets/icons/delete_forever.svg new file mode 100644 index 000000000..dcce201e5 --- /dev/null +++ b/assets/icons/delete_forever.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/icons/explore.svg b/assets/icons/explore.svg new file mode 100644 index 000000000..3e3a51013 --- /dev/null +++ b/assets/icons/explore.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/icons/flip_to_back.svg b/assets/icons/flip_to_back.svg new file mode 100644 index 000000000..bed0814b0 --- /dev/null +++ b/assets/icons/flip_to_back.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/icons/flip_to_front.svg b/assets/icons/flip_to_front.svg new file mode 100644 index 000000000..bd1e552b1 --- /dev/null +++ b/assets/icons/flip_to_front.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/icons/get_app.svg b/assets/icons/get_app.svg new file mode 100644 index 000000000..fbca05dde --- /dev/null +++ b/assets/icons/get_app.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/icons/lock.svg b/assets/icons/lock.svg new file mode 100644 index 000000000..f9c834328 --- /dev/null +++ b/assets/icons/lock.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/icons/opacity.svg b/assets/icons/opacity.svg new file mode 100644 index 000000000..ef76492a8 --- /dev/null +++ b/assets/icons/opacity.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/icons/restore.svg b/assets/icons/restore.svg new file mode 100644 index 000000000..9e1229fa8 --- /dev/null +++ b/assets/icons/restore.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/icons/symbol/sprite.symbol.html b/assets/icons/symbol/sprite.symbol.html new file mode 100644 index 000000000..36cdeb99d --- /dev/null +++ b/assets/icons/symbol/sprite.symbol.html @@ -0,0 +1,417 @@ + + + + + + + + SVG <symbol> sprite preview | svg-sprite + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

SVG <symbol> sprite preview

+

This preview features two methods of using the generated sprite in conjunction with inline SVG. Please have a look at the HTML source for further details and be aware of the following constraints:

+ +
+
+ + + +

A) Inline SVG with embedded sprite

+ + + + +
+
+ + + +

B) Inline SVG with external sprite (IE 9-11 with polyfill only)

+ + + + +
+ + + diff --git a/assets/icons/symbol/sprite.symbol.svg b/assets/icons/symbol/sprite.symbol.svg new file mode 100644 index 000000000..a6cfe9cef --- /dev/null +++ b/assets/icons/symbol/sprite.symbol.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/transform.svg b/assets/icons/transform.svg new file mode 100644 index 000000000..f5e266fff --- /dev/null +++ b/assets/icons/transform.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/icons/unlock.svg b/assets/icons/unlock.svg new file mode 100644 index 000000000..8359252e3 --- /dev/null +++ b/assets/icons/unlock.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/dist/leaflet.distortableimage.css b/dist/leaflet.distortableimage.css index 6e1986481..0b9328293 100644 --- a/dist/leaflet.distortableimage.css +++ b/dist/leaflet.distortableimage.css @@ -1,4 +1,4 @@ -@font-face { +/* @font-face { font-family: 'Material Icons'; font-style: normal; font-weight: 400; @@ -10,9 +10,31 @@ font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/materialiconsoutlined/v8/gok-H7zzDkdnRel8-DQ6KAXJ69wP1tGnf4ZGhUcel5euIg.woff2) format('woff2'); -} - -.material-icons { +} */ + +svg { + width: 18px; + height: 18px; + vertical-align: middle; +} + + /* .svg-icons--delete_forever-18px-dims { + color: #c10d0d; + } */ + /* + .svg-icons--get_app-18px-dims { width: 18px; height: 18px; } + .svg-icons--outline-border_clear-18px-dims { width: 18px; height: 18px; } + .svg-icons--outline-border_outer-18px-dims { width: 18px; height: 18px; } + .svg-icons--outline-crop_rotate-18px-dims { width: 18px; height: 18px; } + .svg-icons--outline-explore-18px-dims { width: 18px; height: 18px; } + .svg-icons--outline-flip_to_back-18px-dims { width: 18px; height: 18px; } + .svg-icons--outline-flip_to_front-18px-dims { width: 18px; height: 18px; } + .svg-icons--outline-lock-18px-dims { width: 18px; height: 18px; } + .svg-icons--outline-opacity-18px-dims { width: 18px; height: 18px; } + .svg-icons--outline-transform-18px-dims { width: 18px; height: 18px; } + .svg-icons--previous-dims { width: 18px; height: 18px; } */ + +/* .material-icons { font-family: 'Material Icons'; } @@ -41,7 +63,7 @@ .material-icons.md-18, .material-icons-outlined.md-18 { font-size: 18px; line-height: inherit; -} +} */ #imgcontainer { position:relative; diff --git a/dist/leaflet.distortableimage.js b/dist/leaflet.distortableimage.js index 90f2d9bf1..1ab495c82 100644 --- a/dist/leaflet.distortableimage.js +++ b/dist/leaflet.distortableimage.js @@ -1073,20 +1073,25 @@ L.ScaleHandle = L.EditHandle.extend({ L.DistortableImage = L.DistortableImage || {}; var EditOverlayAction = LeafletToolbar.ToolbarAction.extend({ - initialize: function(map, overlay, options) { - this._overlay = overlay; - this._map = map; + initialize: function(map, overlay, options) { + this._overlay = overlay; + this._map = map; - LeafletToolbar.ToolbarAction.prototype.initialize.call(this, options); - } - }), - + LeafletToolbar.ToolbarAction.prototype.initialize.call(this, options); + } +}), + ToggleTransparency = EditOverlayAction.extend({ - options: { - toolbarIcon: { - html: 'opacity', - tooltip: 'Toggle Transparency' - } + initialize: function(map, overlay, options) { + var href = ''; + + options = options || {}; + options.toolbarIcon = { + html: '' + href + '', + tooltip: "Toggle Transparency" + }; + + EditOverlayAction.prototype.initialize.call(this, map, overlay, options); }, addHooks: function() { @@ -1095,17 +1100,26 @@ var EditOverlayAction = LeafletToolbar.ToolbarAction.extend({ editing._toggleTransparency(); this.disable(); } - }), - + }), + ToggleOutline = EditOverlayAction.extend({ initialize: function(map, overlay, options) { var edit = overlay.editing, - icon = edit._outlined ? 'border_clear' : 'border_outer'; + href, + tooltip; + + if (edit._outlined) { + href = ''; + tooltip = 'Remove Border'; + } else { + href = ''; + tooltip = 'Add Border'; + } options = options || {}; options.toolbarIcon = { - html: '' + icon + '', - tooltip: 'Toggle Outline' + html: '' + href + '', + tooltip: tooltip }; EditOverlayAction.prototype.initialize.call(this, map, overlay, options); @@ -1117,14 +1131,19 @@ var EditOverlayAction = LeafletToolbar.ToolbarAction.extend({ editing._toggleOutline(); this.disable(); } - }), - + }), + Delete = EditOverlayAction.extend({ - options: { - toolbarIcon: { - html: 'delete_forever', - tooltip: 'Delete Image' - } + initialize: function(map, overlay, options) { + var href = ''; + + options = options || {}; + options.toolbarIcon = { + html: '' + href + '', + tooltip: "Delete Image" + }; + + EditOverlayAction.prototype.initialize.call(this, map, overlay, options); }, addHooks: function() { @@ -1133,25 +1152,25 @@ var EditOverlayAction = LeafletToolbar.ToolbarAction.extend({ editing._removeOverlay(); this.disable(); } - }), - + }), + ToggleLock = EditOverlayAction.extend({ initialize: function(map, overlay, options) { var edit = overlay.editing, - icon, + href, tooltip; - if (edit._mode === 'lock') { - icon = 'lock_open'; - tooltip = 'Unlock'; + if (edit._mode === "lock") { + href = ''; + tooltip = "Unlock"; } else { - icon = 'lock'; - tooltip = 'Lock'; + href = ''; + tooltip = "Lock"; } options = options || {}; options.toolbarIcon = { - html: '' + icon + '', + html: '' + href + '', tooltip: tooltip }; @@ -1164,25 +1183,25 @@ var EditOverlayAction = LeafletToolbar.ToolbarAction.extend({ editing._toggleLock(); this.disable(); } - }), - + }), + ToggleRotateScale = EditOverlayAction.extend({ initialize: function(map, overlay, options) { - var edit = overlay.editing, - icon, - tooltip; - - if (edit._mode === 'rotateScale') { - icon = 'transform'; - tooltip = 'Distort'; - } else { - icon = 'crop_rotate'; - tooltip = 'Rotate+Scale'; - } + var edit = overlay.editing, + href, + tooltip; + + if (edit._mode === "rotateScale") { + href = ''; + tooltip = "Distort"; + } else { + href = ''; + tooltip = "Rotate+Scale"; + } options = options || {}; options.toolbarIcon = { - html: '' + icon + '', + html: '' + href + '', tooltip: tooltip }; @@ -1195,14 +1214,19 @@ var EditOverlayAction = LeafletToolbar.ToolbarAction.extend({ editing._toggleRotateScale(); this.disable(); } - }), - + }), + Export = EditOverlayAction.extend({ - options: { - toolbarIcon: { - html: 'get_app', - tooltip: 'Export Image' - } + initialize: function(map, overlay, options) { + var href = ''; + + options = options || {}; + options.toolbarIcon = { + html: '' + href + '', + tooltip: "Export Image" + }; + + EditOverlayAction.prototype.initialize.call(this, map, overlay, options); }, addHooks: function() { @@ -1211,25 +1235,25 @@ var EditOverlayAction = LeafletToolbar.ToolbarAction.extend({ editing._toggleExport(); this.disable(); } - }), - + }), + ToggleOrder = EditOverlayAction.extend({ initialize: function(map, overlay, options) { var edit = overlay.editing, - icon, + href, tooltip; - if (edit._toggledImage) { - icon = 'flip_to_front'; - tooltip = 'Stack to front'; - } else { - icon = 'flip_to_back'; - tooltip = 'Stack to back'; - } + if (edit._toggledImage) { + href = ''; + tooltip = 'Stack to front'; + } else { + href = ''; + tooltip = 'Stack to back'; + } options = options || {}; options.toolbarIcon = { - html: '' + icon + '', + html: '' + href + '', tooltip: tooltip }; @@ -1242,14 +1266,19 @@ var EditOverlayAction = LeafletToolbar.ToolbarAction.extend({ editing._toggleOrder(); this.disable(); } - }), - + }), + EnableEXIF = EditOverlayAction.extend({ - options: { - toolbarIcon: { - html: 'explore', - tooltip: 'Geolocate Image' - } + initialize: function(map, overlay, options) { + var href = ''; + + options = options || {}; + options.toolbarIcon = { + html: '' + href + '', + tooltip: "Geolocate Image" + }; + + EditOverlayAction.prototype.initialize.call(this, map, overlay, options); }, addHooks: function() { @@ -1260,11 +1289,16 @@ var EditOverlayAction = LeafletToolbar.ToolbarAction.extend({ }), Restore = EditOverlayAction.extend({ - options: { - toolbarIcon: { - html: '', + initialize: function(map, overlay, options) { + var href = ''; + + options = options || {}; + options.toolbarIcon = { + html: '' + href + '', tooltip: "Restore" - } + }; + + EditOverlayAction.prototype.initialize.call(this, map, overlay, options); }, addHooks: function() { diff --git a/package-lock.json b/package-lock.json index 41a0e4ef9..30a8d0983 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,6 +40,18 @@ "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", "dev": true }, + "@types/node": { + "version": "12.0.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.8.tgz", + "integrity": "sha512-b8bbUOTwzIY3V5vDTY1fIJ+ePKDUBqt2hC2woVGotdQQhG/2Sh62HOKHrT7ab+VerXAcPyAiTEipPu/FsreUtg==", + "dev": true + }, + "@types/q": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", + "dev": true + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -414,6 +426,12 @@ } } }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -566,6 +584,74 @@ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true }, + "cheerio": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", + "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.1", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + }, + "dependencies": { + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", + "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "chokidar": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", @@ -672,6 +758,72 @@ } } }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -693,6 +845,16 @@ "object-visit": "^1.0.0" } }, + "color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "dev": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -708,12 +870,38 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colornames": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", + "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=", + "dev": true + }, "colors": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, + "colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "dev": true, + "requires": { + "color": "3.0.x", + "text-hex": "1.0.x" + } + }, "combined-stream": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", @@ -727,8 +915,7 @@ "version": "2.20.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "dev": true, - "optional": true + "dev": true }, "component-bind": { "version": "1.0.0", @@ -791,6 +978,16 @@ } } }, + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, "connect": { "version": "3.6.6", "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", @@ -860,6 +1057,97 @@ "which": "^1.2.9" } }, + "css-select": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", + "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^2.1.2", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + }, + "dependencies": { + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + } + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-selector-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.3.0.tgz", + "integrity": "sha1-XxrUPi2O77/cME/NOaUhZklD4+s=", + "dev": true + }, + "css-tree": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", + "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", + "dev": true, + "requires": { + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" + } + }, + "css-url-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", + "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=", + "dev": true + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true + }, + "cssmin": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/cssmin/-/cssmin-0.4.3.tgz", + "integrity": "sha1-yRlAd+Dr2s1pHV9ZAVudgZ840BU=", + "dev": true + }, + "csso": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", + "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "dev": true, + "requires": { + "css-tree": "1.0.0-alpha.29" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", + "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "dev": true, + "requires": { + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" + } + } + } + }, + "cssom": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz", + "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==", + "dev": true + }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", @@ -1009,6 +1297,17 @@ "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", "dev": true }, + "diagnostics": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", + "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", + "dev": true, + "requires": { + "colorspace": "1.1.x", + "enabled": "1.0.x", + "kuler": "1.0.x" + } + }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", @@ -1080,6 +1379,18 @@ "safer-buffer": "^2.1.0" } }, + "editorconfig": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", + "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -1092,6 +1403,15 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, + "enabled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", + "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", + "dev": true, + "requires": { + "env-variable": "0.0.x" + } + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -1193,6 +1513,12 @@ "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", "dev": true }, + "env-variable": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", + "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==", + "dev": true + }, "error": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", @@ -1502,6 +1828,12 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fast-safe-stringify": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", + "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==", + "dev": true + }, "faye-websocket": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", @@ -1520,6 +1852,12 @@ "pend": "~1.2.0" } }, + "fecha": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", + "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==", + "dev": true + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -2619,6 +2957,29 @@ "which": "~1.3.0" } }, + "grunt-svg-sprite": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/grunt-svg-sprite/-/grunt-svg-sprite-1.5.0.tgz", + "integrity": "sha512-E7q84qIYLygO/CRlqH2t5EdsaLdblqNs2JSpY+d1XEyNIlOU0tsUuG/cro36Nd3IGSnouzIJAS4yurpPUHUrRA==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "prettysize": "^1.1.0", + "svg-sprite": "^1.5.0" + } + }, + "grunt-svgstore": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-svgstore/-/grunt-svgstore-2.0.0.tgz", + "integrity": "sha512-+5Hxo9F2REvX99EGSTltDiVgla6oNgkTXBpZsKGdyj/zhEs6sPZHyqqlX+im7sz2xWxItv97r3kGijVtxp7pKg==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "cheerio": "^1.0.0-rc.2", + "handlebars": "^4.0.5", + "js-beautify": "^1.5.10" + } + }, "handlebars": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", @@ -3214,6 +3575,35 @@ "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==", "dev": true }, + "js-beautify": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.0.tgz", + "integrity": "sha512-OMwf/tPDpE/BLlYKqZOhqWsd3/z2N3KOlyn1wsCRGFwViE8LOQTcDtathQvHvZc+q+zWmcNAbwKSC+iJoMaH2Q==", + "dev": true, + "requires": { + "config-chain": "^1.1.12", + "editorconfig": "^0.15.3", + "glob": "^7.1.3", + "mkdirp": "~0.5.1", + "nopt": "~4.0.1" + }, + "dependencies": { + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", @@ -3428,6 +3818,15 @@ "graceful-fs": "^4.1.9" } }, + "kuler": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", + "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", + "dev": true, + "requires": { + "colornames": "^1.1.1" + } + }, "lcid": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", @@ -3517,58 +3916,213 @@ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "dev": true }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "lodash._arraymap": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._arraymap/-/lodash._arraymap-3.0.0.tgz", + "integrity": "sha1-Go/Q9MDfS2HeoHbXF83Jfwo8PmY=", + "dev": true + }, + "lodash._basecallback": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/lodash._basecallback/-/lodash._basecallback-3.3.1.tgz", + "integrity": "sha1-t7K7Q9whYEJKIczybFfkQ3cqjic=", "dev": true, "requires": { - "chalk": "^2.0.1" + "lodash._baseisequal": "^3.0.0", + "lodash._bindcallback": "^3.0.0", + "lodash.isarray": "^3.0.0", + "lodash.pairs": "^3.0.0" } }, - "log4js": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.1.0.tgz", - "integrity": "sha512-eDa+zZPeVEeK6QGJAePyXM6pg4P3n3TO5rX9iZMVY48JshsTyLJZLIL5HipI1kQ2qLsSyOpUqNND/C5H4WhhiA==", + "lodash._baseeach": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash._baseeach/-/lodash._baseeach-3.0.4.tgz", + "integrity": "sha1-z4cGVyyhROjZ11InyZDamC+TKvM=", "dev": true, "requires": { - "date-format": "^2.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.0", - "rfdc": "^1.1.2", - "streamroller": "^1.0.4" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } + "lodash.keys": "^3.0.0" } }, - "lolex": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.0.1.tgz", - "integrity": "sha512-UHuOBZ5jjsKuzbB/gRNNW8Vg8f00Emgskdq2kvZxgBJCS0aqquAuXai/SkWORlKeZEiNQWZjFZOqIUcH9LqKCw==", + "lodash._baseget": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/lodash._baseget/-/lodash._baseget-3.7.2.tgz", + "integrity": "sha1-G2rh1frPPCVTI1ChPBGXy4u2dPQ=", "dev": true }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "lodash._baseisequal": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/lodash._baseisequal/-/lodash._baseisequal-3.0.7.tgz", + "integrity": "sha1-2AJfdjOdKTQnZ9zIh85cuVpbUfE=", "dev": true, "requires": { - "currently-unhandled": "^0.4.1", + "lodash.isarray": "^3.0.0", + "lodash.istypedarray": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._topath": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/lodash._topath/-/lodash._topath-3.8.1.tgz", + "integrity": "sha1-PsXiYGAU9MuX91X+aRTt2L/ADqw=", + "dev": true, + "requires": { + "lodash.isarray": "^3.0.0" + } + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.istypedarray": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz", + "integrity": "sha1-yaR3SYYHUB2OhJTSg7h8OSgc72I=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "lodash.map": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-3.1.4.tgz", + "integrity": "sha1-tIOs0beGxce0ksSV97UmYim8AMI=", + "dev": true, + "requires": { + "lodash._arraymap": "^3.0.0", + "lodash._basecallback": "^3.0.0", + "lodash._baseeach": "^3.0.0", + "lodash.isarray": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "lodash.pairs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.pairs/-/lodash.pairs-3.0.1.tgz", + "integrity": "sha1-u+CNV4bu6qCaFckevw3LfSvjJqk=", + "dev": true, + "requires": { + "lodash.keys": "^3.0.0" + } + }, + "lodash.pluck": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.pluck/-/lodash.pluck-3.1.2.tgz", + "integrity": "sha1-s0fwN0wBafDusE1nLYnOyGMsIjE=", + "dev": true, + "requires": { + "lodash._baseget": "^3.0.0", + "lodash._topath": "^3.0.0", + "lodash.isarray": "^3.0.0", + "lodash.map": "^3.0.0" + } + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "log4js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.1.0.tgz", + "integrity": "sha512-eDa+zZPeVEeK6QGJAePyXM6pg4P3n3TO5rX9iZMVY48JshsTyLJZLIL5HipI1kQ2qLsSyOpUqNND/C5H4WhhiA==", + "dev": true, + "requires": { + "date-format": "^2.0.0", + "debug": "^4.1.1", + "flatted": "^2.0.0", + "rfdc": "^1.1.2", + "streamroller": "^1.0.4" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "logform": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", + "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", + "dev": true, + "requires": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^2.3.3", + "ms": "^2.1.1", + "triple-beam": "^1.3.0" + }, + "dependencies": { + "colors": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", + "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "lolex": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.0.1.tgz", + "integrity": "sha512-UHuOBZ5jjsKuzbB/gRNNW8Vg8f00Emgskdq2kvZxgBJCS0aqquAuXai/SkWORlKeZEiNQWZjFZOqIUcH9LqKCw==", + "dev": true + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", "signal-exit": "^3.0.0" } }, @@ -3630,6 +4184,12 @@ "stack-trace": "0.0.10" } }, + "mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", + "dev": true + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -3854,6 +4414,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "mustache": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-3.0.1.tgz", + "integrity": "sha512-jFI/4UVRsRYdUbuDTKT7KzfOp7FiD5WzYmmwNwXyUVypC0xjoTL78Fqc0jHUPIvvGD+6DQSPHIt1NE7D1ArsqA==", + "dev": true + }, "nan": { "version": "2.13.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", @@ -3964,6 +4530,15 @@ "path-key": "^2.0.0" } }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -4080,6 +4655,18 @@ "isobject": "^3.0.1" } }, + "object.values": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -4098,6 +4685,12 @@ "wrappy": "1" } }, + "one-time": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", + "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=", + "dev": true + }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", @@ -4234,6 +4827,15 @@ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "parseqs": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", @@ -4425,6 +5027,12 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, + "prettysize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/prettysize/-/prettysize-1.1.0.tgz", + "integrity": "sha512-U5Noa+FYV1dGkICyLJz8IWlDUehPF4Bk9tZRO8YqPhLA9EoiHuFqtnpWY2mvMjHh5eOLo82HipeLn4RIiSsGqQ==", + "dev": true + }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", @@ -4437,6 +5045,12 @@ "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", "dev": true }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -4465,6 +5079,12 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, "qjobs": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", @@ -4623,6 +5243,12 @@ "is-finite": "^1.0.0" } }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", @@ -4770,6 +5396,12 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", @@ -4830,12 +5462,89 @@ "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", "dev": true }, + "should": { + "version": "13.2.3", + "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", + "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", + "dev": true, + "requires": { + "should-equal": "^2.0.0", + "should-format": "^3.0.3", + "should-type": "^1.4.0", + "should-type-adaptors": "^1.0.1", + "should-util": "^1.0.0" + } + }, + "should-equal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", + "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", + "dev": true, + "requires": { + "should-type": "^1.4.0" + } + }, + "should-format": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", + "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", + "dev": true, + "requires": { + "should-type": "^1.3.0", + "should-type-adaptors": "^1.0.1" + } + }, + "should-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", + "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", + "dev": true + }, + "should-type-adaptors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", + "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", + "dev": true, + "requires": { + "should-type": "^1.3.0", + "should-util": "^1.0.0" + } + }, + "should-util": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.0.tgz", + "integrity": "sha1-yYzaN0qmsZDfi6h8mInCtNtiAGM=", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, "sinon": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.3.2.tgz", @@ -5137,6 +5846,12 @@ "tweetnacl": "~0.14.0" } }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -5294,6 +6009,216 @@ "has-flag": "^3.0.0" } }, + "svg-sprite": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/svg-sprite/-/svg-sprite-1.5.0.tgz", + "integrity": "sha512-0mE5BLY3K8wg3+HrYfzpiKbIM44IGcg8uINED8ri22EdQbLvGecOHjRtkrNAlphbiU5kyGyqoBlIaukL45fs2Q==", + "dev": true, + "requires": { + "async": "^2.6.1", + "css-selector-parser": "^1.3.0", + "cssmin": "^0.4.3", + "cssom": "^0.3.4", + "dateformat": "^3.0.3", + "glob": "^7.1.3", + "js-yaml": "^3.12.0", + "lodash": "^4.17.11", + "lodash.pluck": "^3.1.2", + "mkdirp": "^0.5.1", + "mocha": "^5.2.0", + "mustache": "^3.0.0", + "phantomjs-prebuilt": "^2.1.16", + "prettysize": "^1.1.0", + "should": "^13.2.3", + "svgo": "^1.1.1", + "vinyl": "^2.2.0", + "winston": "^3.1.0", + "xmldom": "0.1.27", + "xpath": "^0.0.27", + "yargs": "^12.0.2" + }, + "dependencies": { + "async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "dev": true, + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "svgo": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", + "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.28", + "css-url-regex": "^1.1.0", + "csso": "^3.5.1", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "dev": true + }, "throttleit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", @@ -5414,6 +6339,12 @@ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", "dev": true }, + "triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==", + "dev": true + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -5545,6 +6476,12 @@ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -5622,6 +6559,16 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -5663,6 +6610,20 @@ "extsprintf": "^1.2.0" } }, + "vinyl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", + "dev": true, + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + } + }, "void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", @@ -5714,6 +6675,90 @@ "string-width": "^1.0.2 || 2" } }, + "winston": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", + "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", + "dev": true, + "requires": { + "async": "^2.6.1", + "diagnostics": "^1.1.1", + "is-stream": "^1.1.0", + "logform": "^2.1.1", + "one-time": "0.0.4", + "readable-stream": "^3.1.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.3.0" + }, + "dependencies": { + "async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", + "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "winston-transport": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", + "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", + "dev": true, + "requires": { + "readable-stream": "^2.3.6", + "triple-beam": "^1.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", @@ -5769,12 +6814,24 @@ "ultron": "~1.1.0" } }, + "xmldom": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", + "dev": true + }, "xmlhttprequest-ssl": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", "dev": true }, + "xpath": { + "version": "0.0.27", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", + "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==", + "dev": true + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", diff --git a/package.json b/package.json index fc687c827..36275e3dc 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,8 @@ "grunt-contrib-jshint": "^2.0.0", "grunt-contrib-watch": "^1.0.0", "grunt-karma": "^3.0.1", + "grunt-svg-sprite": "^1.5.0", + "grunt-svgstore": "^2.0.0", "jquery": "~> 3.4.0", "karma": "^4.1.0", "karma-coverage": "^1.1.1", diff --git a/src/edit/DistortableImage.EditToolbar.js b/src/edit/DistortableImage.EditToolbar.js index 3f390e7b0..e5d957586 100644 --- a/src/edit/DistortableImage.EditToolbar.js +++ b/src/edit/DistortableImage.EditToolbar.js @@ -1,20 +1,25 @@ L.DistortableImage = L.DistortableImage || {}; var EditOverlayAction = LeafletToolbar.ToolbarAction.extend({ - initialize: function(map, overlay, options) { - this._overlay = overlay; - this._map = map; + initialize: function(map, overlay, options) { + this._overlay = overlay; + this._map = map; - LeafletToolbar.ToolbarAction.prototype.initialize.call(this, options); - } - }), - + LeafletToolbar.ToolbarAction.prototype.initialize.call(this, options); + } +}), + ToggleTransparency = EditOverlayAction.extend({ - options: { - toolbarIcon: { - html: 'opacity', - tooltip: 'Toggle Transparency' - } + initialize: function(map, overlay, options) { + var href = ''; + + options = options || {}; + options.toolbarIcon = { + html: '' + href + '', + tooltip: "Toggle Transparency" + }; + + EditOverlayAction.prototype.initialize.call(this, map, overlay, options); }, addHooks: function() { @@ -23,17 +28,26 @@ var EditOverlayAction = LeafletToolbar.ToolbarAction.extend({ editing._toggleTransparency(); this.disable(); } - }), - + }), + ToggleOutline = EditOverlayAction.extend({ initialize: function(map, overlay, options) { var edit = overlay.editing, - icon = edit._outlined ? 'border_clear' : 'border_outer'; + href, + tooltip; + + if (edit._outlined) { + href = ''; + tooltip = 'Remove Border'; + } else { + href = ''; + tooltip = 'Add Border'; + } options = options || {}; options.toolbarIcon = { - html: '' + icon + '', - tooltip: 'Toggle Outline' + html: '' + href + '', + tooltip: tooltip }; EditOverlayAction.prototype.initialize.call(this, map, overlay, options); @@ -45,14 +59,19 @@ var EditOverlayAction = LeafletToolbar.ToolbarAction.extend({ editing._toggleOutline(); this.disable(); } - }), - + }), + Delete = EditOverlayAction.extend({ - options: { - toolbarIcon: { - html: 'delete_forever', - tooltip: 'Delete Image' - } + initialize: function(map, overlay, options) { + var href = ''; + + options = options || {}; + options.toolbarIcon = { + html: '' + href + '', + tooltip: "Delete Image" + }; + + EditOverlayAction.prototype.initialize.call(this, map, overlay, options); }, addHooks: function() { @@ -61,25 +80,25 @@ var EditOverlayAction = LeafletToolbar.ToolbarAction.extend({ editing._removeOverlay(); this.disable(); } - }), - + }), + ToggleLock = EditOverlayAction.extend({ initialize: function(map, overlay, options) { var edit = overlay.editing, - icon, + href, tooltip; - if (edit._mode === 'lock') { - icon = 'lock_open'; - tooltip = 'Unlock'; + if (edit._mode === "lock") { + href = ''; + tooltip = "Unlock"; } else { - icon = 'lock'; - tooltip = 'Lock'; + href = ''; + tooltip = "Lock"; } options = options || {}; options.toolbarIcon = { - html: '' + icon + '', + html: '' + href + '', tooltip: tooltip }; @@ -92,25 +111,25 @@ var EditOverlayAction = LeafletToolbar.ToolbarAction.extend({ editing._toggleLock(); this.disable(); } - }), - + }), + ToggleRotateScale = EditOverlayAction.extend({ initialize: function(map, overlay, options) { - var edit = overlay.editing, - icon, - tooltip; - - if (edit._mode === 'rotateScale') { - icon = 'transform'; - tooltip = 'Distort'; - } else { - icon = 'crop_rotate'; - tooltip = 'Rotate+Scale'; - } + var edit = overlay.editing, + href, + tooltip; + + if (edit._mode === "rotateScale") { + href = ''; + tooltip = "Distort"; + } else { + href = ''; + tooltip = "Rotate+Scale"; + } options = options || {}; options.toolbarIcon = { - html: '' + icon + '', + html: '' + href + '', tooltip: tooltip }; @@ -123,14 +142,19 @@ var EditOverlayAction = LeafletToolbar.ToolbarAction.extend({ editing._toggleRotateScale(); this.disable(); } - }), - + }), + Export = EditOverlayAction.extend({ - options: { - toolbarIcon: { - html: 'get_app', - tooltip: 'Export Image' - } + initialize: function(map, overlay, options) { + var href = ''; + + options = options || {}; + options.toolbarIcon = { + html: '' + href + '', + tooltip: "Export Image" + }; + + EditOverlayAction.prototype.initialize.call(this, map, overlay, options); }, addHooks: function() { @@ -139,25 +163,25 @@ var EditOverlayAction = LeafletToolbar.ToolbarAction.extend({ editing._toggleExport(); this.disable(); } - }), - + }), + ToggleOrder = EditOverlayAction.extend({ initialize: function(map, overlay, options) { var edit = overlay.editing, - icon, + href, tooltip; - if (edit._toggledImage) { - icon = 'flip_to_front'; - tooltip = 'Stack to front'; - } else { - icon = 'flip_to_back'; - tooltip = 'Stack to back'; - } + if (edit._toggledImage) { + href = ''; + tooltip = 'Stack to front'; + } else { + href = ''; + tooltip = 'Stack to back'; + } options = options || {}; options.toolbarIcon = { - html: '' + icon + '', + html: '' + href + '', tooltip: tooltip }; @@ -170,14 +194,19 @@ var EditOverlayAction = LeafletToolbar.ToolbarAction.extend({ editing._toggleOrder(); this.disable(); } - }), - + }), + EnableEXIF = EditOverlayAction.extend({ - options: { - toolbarIcon: { - html: 'explore', - tooltip: 'Geolocate Image' - } + initialize: function(map, overlay, options) { + var href = ''; + + options = options || {}; + options.toolbarIcon = { + html: '' + href + '', + tooltip: "Geolocate Image" + }; + + EditOverlayAction.prototype.initialize.call(this, map, overlay, options); }, addHooks: function() { @@ -188,11 +217,16 @@ var EditOverlayAction = LeafletToolbar.ToolbarAction.extend({ }), Restore = EditOverlayAction.extend({ - options: { - toolbarIcon: { - html: '', + initialize: function(map, overlay, options) { + var href = ''; + + options = options || {}; + options.toolbarIcon = { + html: '' + href + '', tooltip: "Restore" - } + }; + + EditOverlayAction.prototype.initialize.call(this, map, overlay, options); }, addHooks: function() {