diff --git a/.eslintignore b/.eslintignore index 4c9b7d6c..92d1e86d 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,13 +1,14 @@ node_modules +editor/jquery.js editor/jspdf/jspdf.min.js editor/jspdf/underscore-min.js -jgraduate/jpicker.min.js -jgraduate/jquery.jgraduate.js -jquery-ui -jquerybbq -js-hotkeys -spinbtn/JQuerySpinBtn.min.js +editor/jgraduate/jpicker.min.js +editor/jgraduate/jquery.jgraduate.min.js +editor/jquery-ui +editor/jquerybbq +editor/js-hotkeys +editor/spinbtn/JQuerySpinBtn.min.js test/qunit test/sinon wave/json2.js diff --git a/editor/browser.js b/editor/browser.js index dc2cafc4..7ebe82e9 100644 --- a/editor/browser.js +++ b/editor/browser.js @@ -1,5 +1,5 @@ -/*globals $, svgedit*/ -/*jslint vars: true, eqeq: true*/ +/* eslint-disable no-var, eqeqeq */ +/* globals $, svgedit */ /** * Package: svgedit.browser * @@ -12,7 +12,8 @@ // Dependencies: // 1) jQuery (for $.alert()) -(function() {'use strict'; +(function () { +'use strict'; if (!svgedit.browser) { svgedit.browser = {}; @@ -21,12 +22,12 @@ if (!svgedit.browser) { // alias var NS = svgedit.NS; -var supportsSvg_ = (function() { +var supportsSvg_ = (function () { return !!document.createElementNS && !!document.createElementNS(NS.SVG, 'svg').createSVGRect; }()); -svgedit.browser.supportsSvg = function() { return supportsSvg_; }; -if(!svgedit.browser.supportsSvg()) { +svgedit.browser.supportsSvg = function () { return supportsSvg_; }; +if (!svgedit.browser.supportsSvg()) { window.location = 'browser-not-supported.html'; return; } @@ -44,41 +45,41 @@ var isWindows_ = userAgent.indexOf('Windows') >= 0; var isMac_ = userAgent.indexOf('Macintosh') >= 0; var isTouch_ = 'ontouchstart' in window; -var supportsSelectors_ = (function() { +var supportsSelectors_ = (function () { return !!svg.querySelector; }()); -var supportsXpath_ = (function() { +var supportsXpath_ = (function () { return !!document.evaluate; }()); // segList functions (for FF1.5 and 2.0) -var supportsPathReplaceItem_ = (function() { +var supportsPathReplaceItem_ = (function () { var path = document.createElementNS(NS.SVG, 'path'); path.setAttribute('d', 'M0,0 10,10'); var seglist = path.pathSegList; - var seg = path.createSVGPathSegLinetoAbs(5,5); + var seg = path.createSVGPathSegLinetoAbs(5, 5); try { seglist.replaceItem(seg, 1); return true; - } catch(err) {} + } catch (err) {} return false; }()); -var supportsPathInsertItemBefore_ = (function() { +var supportsPathInsertItemBefore_ = (function () { var path = document.createElementNS(NS.SVG, 'path'); path.setAttribute('d', 'M0,0 10,10'); var seglist = path.pathSegList; - var seg = path.createSVGPathSegLinetoAbs(5,5); + var seg = path.createSVGPathSegLinetoAbs(5, 5); try { seglist.insertItemBefore(seg, 1); return true; - } catch(err) {} + } catch (err) {} return false; }()); // text character positioning (for IE9) -var supportsGoodTextCharPos_ = (function() { +var supportsGoodTextCharPos_ = (function () { var svgroot = document.createElementNS(NS.SVG, 'svg'); var svgcontent = document.createElementNS(NS.SVG, 'svg'); document.documentElement.appendChild(svgroot); @@ -92,7 +93,7 @@ var supportsGoodTextCharPos_ = (function() { return (pos === 0); }()); -var supportsPathBBox_ = (function() { +var supportsPathBBox_ = (function () { var svgcontent = document.createElementNS(NS.SVG, 'svg'); document.documentElement.appendChild(svgcontent); var path = document.createElementNS(NS.SVG, 'path'); @@ -104,7 +105,7 @@ var supportsPathBBox_ = (function() { }()); // Support for correct bbox sizing on groups with horizontal/vertical lines -var supportsHVLineContainerBBox_ = (function() { +var supportsHVLineContainerBBox_ = (function () { var svgcontent = document.createElementNS(NS.SVG, 'svg'); document.documentElement.appendChild(svgcontent); var path = document.createElementNS(NS.SVG, 'path'); @@ -121,31 +122,31 @@ var supportsHVLineContainerBBox_ = (function() { return (bbox.width == 15); }()); -var supportsEditableText_ = (function() { +var supportsEditableText_ = (function () { // TODO: Find better way to check support for this return isOpera_; }()); -var supportsGoodDecimals_ = (function() { +var supportsGoodDecimals_ = (function () { // Correct decimals on clone attributes (Opera < 10.5/win/non-en) var rect = document.createElementNS(NS.SVG, 'rect'); rect.setAttribute('x', 0.1); var crect = rect.cloneNode(false); - var retValue = (crect.getAttribute('x').indexOf(',') == -1); - if(!retValue) { - $.alert('NOTE: This version of Opera is known to contain bugs in SVG-edit.\n'+ + var retValue = (crect.getAttribute('x').indexOf(',') === -1); + if (!retValue) { + $.alert('NOTE: This version of Opera is known to contain bugs in SVG-edit.\n' + 'Please upgrade to the latest version in which the problems have been fixed.'); } return retValue; }()); -var supportsNonScalingStroke_ = (function() { +var supportsNonScalingStroke_ = (function () { var rect = document.createElementNS(NS.SVG, 'rect'); rect.setAttribute('style', 'vector-effect:non-scaling-stroke'); return rect.style.vectorEffect === 'non-scaling-stroke'; }()); -var supportsNativeSVGTransformLists_ = (function() { +var supportsNativeSVGTransformLists_ = (function () { var rect = document.createElementNS(NS.SVG, 'rect'); var rxform = rect.transform.baseVal; var t1 = svg.createSVGTransform(); @@ -163,26 +164,25 @@ var supportsNativeSVGTransformLists_ = (function() { // Public API -svgedit.browser.isOpera = function() { return isOpera_; }; -svgedit.browser.isWebkit = function() { return isWebkit_; }; -svgedit.browser.isGecko = function() { return isGecko_; }; -svgedit.browser.isIE = function() { return isIE_; }; -svgedit.browser.isChrome = function() { return isChrome_; }; -svgedit.browser.isWindows = function() { return isWindows_; }; -svgedit.browser.isMac = function() { return isMac_; }; -svgedit.browser.isTouch = function() { return isTouch_; }; +svgedit.browser.isOpera = function () { return isOpera_; }; +svgedit.browser.isWebkit = function () { return isWebkit_; }; +svgedit.browser.isGecko = function () { return isGecko_; }; +svgedit.browser.isIE = function () { return isIE_; }; +svgedit.browser.isChrome = function () { return isChrome_; }; +svgedit.browser.isWindows = function () { return isWindows_; }; +svgedit.browser.isMac = function () { return isMac_; }; +svgedit.browser.isTouch = function () { return isTouch_; }; -svgedit.browser.supportsSelectors = function() { return supportsSelectors_; }; -svgedit.browser.supportsXpath = function() { return supportsXpath_; }; - -svgedit.browser.supportsPathReplaceItem = function() { return supportsPathReplaceItem_; }; -svgedit.browser.supportsPathInsertItemBefore = function() { return supportsPathInsertItemBefore_; }; -svgedit.browser.supportsPathBBox = function() { return supportsPathBBox_; }; -svgedit.browser.supportsHVLineContainerBBox = function() { return supportsHVLineContainerBBox_; }; -svgedit.browser.supportsGoodTextCharPos = function() { return supportsGoodTextCharPos_; }; -svgedit.browser.supportsEditableText = function() { return supportsEditableText_; }; -svgedit.browser.supportsGoodDecimals = function() { return supportsGoodDecimals_; }; -svgedit.browser.supportsNonScalingStroke = function() { return supportsNonScalingStroke_; }; -svgedit.browser.supportsNativeTransformLists = function() { return supportsNativeSVGTransformLists_; }; +svgedit.browser.supportsSelectors = function () { return supportsSelectors_; }; +svgedit.browser.supportsXpath = function () { return supportsXpath_; }; +svgedit.browser.supportsPathReplaceItem = function () { return supportsPathReplaceItem_; }; +svgedit.browser.supportsPathInsertItemBefore = function () { return supportsPathInsertItemBefore_; }; +svgedit.browser.supportsPathBBox = function () { return supportsPathBBox_; }; +svgedit.browser.supportsHVLineContainerBBox = function () { return supportsHVLineContainerBBox_; }; +svgedit.browser.supportsGoodTextCharPos = function () { return supportsGoodTextCharPos_; }; +svgedit.browser.supportsEditableText = function () { return supportsEditableText_; }; +svgedit.browser.supportsGoodDecimals = function () { return supportsGoodDecimals_; }; +svgedit.browser.supportsNonScalingStroke = function () { return supportsNonScalingStroke_; }; +svgedit.browser.supportsNativeTransformLists = function () { return supportsNativeSVGTransformLists_; }; }()); diff --git a/editor/config-sample.js b/editor/config-sample.js index 0336b243..fc8c24f6 100644 --- a/editor/config-sample.js +++ b/editor/config-sample.js @@ -3,7 +3,7 @@ // CREATE A NEW FILE config.js AND ADD CONTENTS // SUCH AS SHOWN BELOW INTO THAT FILE. -/*globals svgEditor*/ +/* globals svgEditor */ /* The config.js file is intended for the setting of configuration or preferences which must run early on; if this is not needed, it is @@ -56,17 +56,17 @@ svgEditor.setConfig({ }); // OTHER CONFIG -svgEditor.setConfig({ +svgEditor.setConfig({ // canvasName: 'default', // canvas_expansion: 3, // initFill: { - // color: 'FF0000', // solid red - // opacity: 1 + // color: 'FF0000', // solid red + // opacity: 1 // }, // initStroke: { - // width: 5, - // color: '000000', // solid black - // opacity: 1 + // width: 5, + // color: '000000', // solid black + // opacity: 1 // }, // initOpacity: 1, // colorPickerCSS: null, diff --git a/editor/contextmenu.js b/editor/contextmenu.js index 9fca31d8..d0c059dc 100644 --- a/editor/contextmenu.js +++ b/editor/contextmenu.js @@ -1,66 +1,66 @@ -/*globals $, svgEditor*/ -/*jslint vars: true, eqeq: true*/ +/* eslint-disable no-var, eqeqeq */ +/* globals $, svgEditor */ /** * Package: svgedit.contextmenu - * + * * Licensed under the Apache License, Version 2 - * + * * Author: Adam Bender */ // Dependencies: // 1) jQuery (for dom injection of context menus) -var svgedit = svgedit || {}; -(function() { - var self = this; - if (!svgedit.contextmenu) { - svgedit.contextmenu = {}; +var svgedit = svgedit || {}; // eslint-disable-line no-use-before-define +(function () { +var self = this; +if (!svgedit.contextmenu) { + svgedit.contextmenu = {}; +} +self.contextMenuExtensions = {}; +var menuItemIsValid = function (menuItem) { + return menuItem && menuItem.id && menuItem.label && menuItem.action && typeof menuItem.action == 'function'; +}; +var addContextMenuItem = function (menuItem) { + // menuItem: {id, label, shortcut, action} + if (!menuItemIsValid(menuItem)) { + console.error('Menu items must be defined and have at least properties: id, label, action, where action must be a function'); + return; } - self.contextMenuExtensions = {}; - var menuItemIsValid = function(menuItem) { - return menuItem && menuItem.id && menuItem.label && menuItem.action && typeof menuItem.action == 'function'; - }; - var addContextMenuItem = function(menuItem) { - // menuItem: {id, label, shortcut, action} - if (!menuItemIsValid(menuItem)) { - console.error("Menu items must be defined and have at least properties: id, label, action, where action must be a function"); - return; - } - if (menuItem.id in self.contextMenuExtensions) { - console.error('Cannot add extension "' + menuItem.id + '", an extension by that name already exists"'); - return; - } - // Register menuItem action, see below for deferred menu dom injection - console.log("Registed contextmenu item: {id:"+ menuItem.id+", label:"+menuItem.label+"}"); - self.contextMenuExtensions[menuItem.id] = menuItem; - //TODO: Need to consider how to handle custom enable/disable behavior - }; - var hasCustomHandler = function(handlerKey) { - return self.contextMenuExtensions[handlerKey] && true; - }; - var getCustomHandler = function(handlerKey) { - return self.contextMenuExtensions[handlerKey].action; - }; - var injectExtendedContextMenuItemIntoDom = function(menuItem) { - if (Object.keys(self.contextMenuExtensions).length === 0) { - // all menuItems appear at the bottom of the menu in their own container. - // if this is the first extension menu we need to add the separator. - $("#cmenu_canvas").append("